// diff expl / dvlp =  17px en dur / window.objects["PageDeGarde"].maDivBand.appendChild(valCss);
function AutoScroll (top,left,width,height,aspect,DDInteractif,bClone){
//===============================================
// attribue ? une div Html u comportement de d?filement automatique des ?l?ments inclus

// usage : soit oHtml une div Html avec un contenu
//             oHtml.AS = AutoScroll;
//             oHTml.AS(10,20,400,250,{mode:'Ascenseur'});

// aspect : mode pr?d?fini
// DDInteractif = true : alt?ration du mode pr?d?fini, modalit? scroll auto sur texte remplac?e par DD du texte

  this.AS         = new ContainerAutoScroll (   null
                                              , this
                                              ,width
                                              ,height
                                              ,{ mode: aspect 
                                                ,DDinteractif: DDInteractif
                                                ,autoScrollSurTexte: !DDInteractif
                                                ,pasDeCloneContenuPasse:!bClone
                                              }
                                              ,this.parentNode,top,left
                                              );
//traceExec('autoscroll this.parentNode = '+this.parentNode,1);                                              
//  this.AS.placeIn( this.parentNode,top,left);                                             

  // pour test , on pourrait ajouter d' autres m?thodes venant de ContainerAutoScroll
  // mais l' id?e est juste d attribuer facilement ? 1 DIV Qqc un comportement de d?filement 
  // sans la faire h?rit?e d'une classe (ce qui peut ?tre r?alis? par ailleurs ? partir de la classe Container)
  this.autoScroll = function (mode) {this.AS.autoScroll(mode);}   // modification de l interface
  this.add        = function (oHtmlElt) {this.AS.add(oHtmlElt);}  // incorpore des elts Html
  this.setDim     = function (width,height) {this.AS.setDim(width,height);}  // fixe L x H
  this.modDim     = function (dWidth,dHeight) {this.AS.modDim(dWidth,dHeight);}  // modifie L x H

  this.adaptToContext = function () {
    this.AS.reaffInterfaceScroll();  //to revise
  }

} 


function ContainerAutoScroll (containerHtml,oHtmlTexte, width, height, options, parent, top, left) {
//===============================================================================================
// public

// remarque pr?liminaire : la d?nomination ContainerAutoScroll est obsol?te (trop restrictive) elle correspondait
// ? un stade du dvlpt o? seul le d?filement automatique ?tait impl?ment? : ? revoir

// amendement ? la re?arque suivante :
//   il n'y a plus d'interaction avec la structure de l'objet container / curseur : 1 div est sp?cialement cr??
// attention: si oHtmlTexte est renseign?: a priori il n'y a un clonage de cet obj Html
// car il est utilis? comme un des composants du container ; toute modification externe
// peut avoir des r?percutions facheuses sur la structure du container (cf. en particulier / curseurs)
// si l'obj est imposant, que l'on veut eviter le clonage et que l'on ne risque pas de modif externe facheuse
// l'option pasDeCloneContenuPasse permet de lever ce comportement par d?faut.
// De m?me pour les contenus ajout?s par .add ou .fill,
// il existe une option cloneContenuAjoute mais le d?faut est inverse : ? priori il n'y a pas de clonage
// parce que ces elements n'affecte pas la structure du container mais seult son contenu.
// chacune de ces m?thodes ayant par ailleurs un argument bClone qui prend le pas sur l'option s'il vaut true

// ? revoir:
//   - forme du curseur (en partie li? au DD)
//   - ds FireFox apres agrandissement max pb de retour taille precdte : largeur trop grde / tableau --> perte bords
//     mais pas de pb si max + min + restore
//   - revoir certains enchainements : pourquoi plusieurs appels de computeDims successifs si new editeur + placeIn avec %
//   - les images des fleches ne doivent pas ?tre transparentes si le texte passe dessous
// ? faire :
//   - disparitio/apparition diff?rentielle scroll haut bas
//   - disparition apparition proced? de scroll lors de l utilisation de la methode add
//   - mode type scroll/molette enfonc?e = pas de zones-gradient de ref pr??tablies mais fct de la position de la souris 
//   au clic avec affichage d'un objet "navigation"
//   - formulaire de modif des options
//   - nouvelles icones fleches pour deplact direct en haut|bas (diff?rentes de celles pour asc win = deplact continu)
//   - r?vision couleurs / bande temoin de position
//   - autre t?moin de position moins gourmand en place (autre positionnement forme ou affichage pourcentage)
// Objectif : 
//-----------
//   disposer d'un cadre Html dans lequel les informations peuvent d?filer vers le haut ou le bas 
//     sans utiliser les ascenseurs window natifs
//     en m?nageant plusieur modes de contr?le du d?filement par l'utilisateur 
//     modes allant :
//      - du d?filement automatique + ou - rapide suivant la position du curseur relativement ? diff?rentes
//        zones pr??tablies
//      - au drag and drop direct du texte ? l'int?rieur du cadre Html ? la fa?on d'Acrobat 
//      - en passant par l'?mulation de l'ascenseur window classique mais avec 1 contr?le total (aussi bien dans IE 
//        que FireFox).
// Principe :
//-----------
//    on joue sur le d?placement relatif de la Div contenant les informations et de la Div repr?sentant le cadre,
//    cette derni?re ?tant en mode overflow : hidden.
// Arguments :
//-----------
// [containerHtml] (i) : objet Html repr?sentant le container
// [oHtmlTexte   ] (i) : objet Html contenant le texte (ou autre) ? afficher
//                       cet elt devient un de obj Html du container (le cadre glissant /containerHtml): this.oHtmlTexte
//                       si l'argt est vide la propri?t? this.oHtmlTexte est affect?e par 1 DIV adhoc cr??e
//                       
//  width          (i) : largeur externe de l'objet ContainerAutoScroll  (pourcentage / parent: autoris?)
//  height         (i) : hauteur externe de l'objet ContainerAutoScroll  (pourcentage / parent: autoris?)

// [options      ] (i) : options de pr?sentation modifiant l'option par d?faut qui est de permettre un 
//                       d?filement automatique par positionnement du curseur directement sur le texte :
//                         mode : mode de pr?sentation pr?d?finie dont les elts sont fix?s dans
//                                       ContainerAutoScroll.prototype.modePreDefElts(Presents|Absents)
//                             'Ascenseur' = ['Ascenseur','AscHautFleche','AscBasFleche']
//                             'Zones'     = ['AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
//                             'Mixte'     = ['Ascenseur','AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
//                         acces(Haut|Bas) : bandes d' acces direct au haut-bas du texte
//                         ascenseur : zone verticale form?e de 3 zones d?terminant 3 effets en pr?sence du curseur 
//                              -la zone sup?rieure = d?placement du texte vers le haut avec effet de gradient
//                               de vitesse
//                              -la zone m?diane = arr?t du d?filement
//                              -la zone sup?rieure = d?placement du texte vers le haut avec effet de gradient
//                               de vitesse
//                         posAsc : 'left'| 'right'   position lat?rale de la zone gradient de d?filement vertical
//                         posAscWin : 'left'| 'right'   position lat?rale de l' "ascenseur" vertical
//                         asc(Haut|Bas)Fleche : fl?ches d'acces direct au haut-bas du texte li?es
//                             ? la zone ascenseur ou aux zones d'acces direct
//                         asc(Haut|Bas)FlecheWin : fl?ches d'acces direct au haut-bas du texte li?es
//                             ? la zone ascenseurWin ou aux zones d'acces direct
//                         bascule : autorise ou non les modifications de pr?sentation / options pass? ? la cr?ation
//                         DDinteractif : permet le d?placement ? la main (cf. Acrobat) par Drag and Drop 
//                                        (en remplacement du comportement d?filt auto s'il ?tait associ? 
//                                        ? la zone texte directement)
//                         ascenseurWin : ?mulation de l'ascenseur vertical classique avec curseur en lieu et place de
//                            l'ascenseur-gradient
//                         ascWinFin : largeur etroite pour ascenseur window ou temoin position 
//                         temoinPosition : coupl? avec l'option ascenseurWin modifie l'ascenceur en une bande 
//                            avec curseur indiquant la position de la zone affich?e / texte complet mais
//                            sans controle par l'utilisateur (pas de DD sur le curseur)
//                         autoScrollSurTexte : scroll auto sur texte suivant position pointeur
//                         scrollSurTemoinPos : scroll auto par pos du pointeur egalt sur la bande corrspondant au
//                            curseur temoin de position (seult si opt['Mod'].AutoScrollSurTexte
//                         coherenceAuto : assure une possibilit? de scroll minimum quelque soient les options
//                            choisies; et plus largement essaye d'entretenir une certaine coh?rence dans le 
//                            cadre des options choisies
//                         pasDeCloneContenuPasse : true | false clone ou non l'obj Html pass? en argt (oHtmlTexte) avant utilisation
//                         cloneContenuAjoute : true | false clone ou non l'obj Html pass? en argt (oHtmlTexte) avant utilisation
//                                              pour les methodes add et fill
//  [parent ]       (i) :  objet Html p?re pour le placelement du container dans la hierarchie DOM ? la cr?ation 
//                         (sinon utiliser la m?thode placeIn ? post?riori)
//  [top]           (i) :  top de l'objet container  / parent  (seult si argt parent pr?sent)
//  [left]          (i) :  left de l'objet container / parent  (seult si argt parent pr?sent)

//for (var attr in options) alert('options['+attr+']= '+options[attr]);
     // code motiv? par l'impossibilit? de modifier width de cursMobile par chgt de className (cf.barreTemoinPosEtroite )
     // permet d'avoir tout de m?me les d?finitions de cstes ds la css
    
// tres longue attente ds le ctxt de l explorateur : a revoir
/*
     var valCss;
     valCss     = document.createElement('DIV');
     valCss.className = 'etroit';
     valCss.style.display = 'none';
     document.body.appendChild(valCss);
*/
     this.valCssEtroit = '5px';
/*
     this.valCssEtroit = getComputStyleStr(valCss,'width');
     document.body.removeChild(valCss);
*/


// tres longue attente ds le ctxt de l explorateur
// pour expl
     valCss = document.createElement('DIV');
     valCss.className = 'large';
     valCss.style.display = 'none';
//comment for rialto  to revise   window.objects["PageDeGarde"].maDivBand.appendChild(valCss);
     document.body.appendChild(valCss);

//     this.valCssLarge = "17px";
// 
     this.valCssLarge = getComputStyleStr(valCss,'width');
 // comment for rialto    window.objects["PageDeGarde"].maDivBand.removeChild(valCss);
     document.body.removeChild(valCss);


/*
invalide avec FireFox
     this.valCss = document.createElement('DIV');
     this.valCss.className = 'cstes';
     this.valCss.style.display = 'none';
    document.body.appendChild(this.valCss);
     this.valCssEtroit = getComputStyleStr(this.valCss,'etroit');
     this.valCssLarge = getComputStyleStr(this.valCss,'large');
*/     


   this.height = height;
   this.width  = width;
   this.top    = top;
   this.left   = left;
     
// m?ta options
  this.opt = new Array;
  this.optionPasDeCloneContenuPasse      = (options ? (options.pasDeCloneContenuPasse      || false) : false);
  this.optionCloneContenuAjoute = (options ? (options.cloneContenuAjoute      || false) : false);
  
  this.opt.Meta = new Object;

this.opt['Meta'].bascule       = (options ? ((options.bascule != null) ? options.bascule : true)
                                        : true);

this.opt['Meta'].CoherenceAuto = (options ? ((options.CoherenceAuto != null) ? options.CoherenceAuto : true)
                                        : true);
// options de pr?sence/absence d'?lts de l'interface
  this.optionAccesHaut     = (options ? (options.accesHaut     || false) : false);
  this.optionAccesBas      = (options ? (options.accesBas      || false) : false);

  this.optionAscenseur     = (options ? (options.ascenseur     || false) : false);

  this.optionAscHautFleche = (options ? (options.ascHautFleche || false) : false);
  this.optionAscBasFleche  = (options ? (options.ascBasFleche  || false) : false);

  this.optionAscenseurWin     = (options ? (options.ascenseurWin     || false) : false);
  this.optionAscHautFlecheWin = (options ? (options.ascHautFlecheWin || false) : false);
  this.optionAscBasFlecheWin  = (options ? (options.ascBasFlecheWin  || false) : false);

// options de modalit?s de comportement de certains elts                                         
  this.opt.Mod = new Object;
//  this.optionPosAsc        = (options ? (options.posAsc        || 'right') : 'right');
//  this.optionPosAscWin        = (options ? (options.posAscWin        || 'left') : 'left');

  this.opt['Mod'].PosAscWin     = (options ? ( (options.posAscWin  != null) ? options.posAscWin
                                                                                    : 'right')
                                               : 'right');
  this.opt['Mod'].PosAscWinLeft = (this.opt['Mod'].PosAscWin == 'left')? true: false;                                               
  this.opt['Mod'].PosAsc        = (options ? (options.posAsc     || 'left') : 'left');
  this.opt['Mod'].PosAscLeft = (this.opt['Mod'].PosAsc == 'left')? true: false;                                               

  this.opt['Mod'].TemoinPos          = (options ? (options.temoinPosition     || false) : false);
  this.opt['Mod'].ScrollSurTemoinPos = (options ? (options.scrollSurTemoinPos || false) : false);
  this.opt['Mod'].DDInteractif       = (options ? (options.DDInteractif       || false) : false);
  this.opt['Mod'].AutoScrollSurTexte = (options ? ( (options.autoScrollSurTexte != null) ? options.autoScrollSurTexte
                                                                                          : true)
                                                : true);
  this.opt['Mod'].AscWinFin       = (options ? (options.ascWinFin      || false) : false);

  //contrainte de coh?rence: fleches uniquement si r?ceptacle pr?vu : ascenseur ou ascenseurWin
  if (   (this.optionAscHautFleche)
      && (    !this.optionAccesHaut 
          &&  !this.optionAscenseur))
        this.optionAscHautFleche = false;
  if (    this.optionAscHautFlecheWin
      &&  !this.optionAscenseurWin)
        this.optionAscHautFlecheWin = false;

  if (   (this.optionAscBasFleche)
      && (    !this.optionAccesBas 
          &&  !this.optionAscenseur))
        this.optionAscBasFleche = false;
  if (    this.optionAscBasFlecheWin
      &&  !this.optionAscenseurWin)
        this.optionAscBasFlecheWin = false;
// positionnement des options correspdt ? la prise en compte d une demande d affichage ds un mode pr?d?fini
// ( l'interface ainsi pr?d?finie peut ?tre amend?e quant au type de d?filement lorsque le pointeur est sur le texte
//   "Drag and Drop" ou "D?filement automatique suivant position pointeur")
if (options && options.mode){
  this.initOptionsModePreDef(options.mode);
  // contr?le de compatibilit?
  if (   options.DDInteractif
      && options.AutoScrollSurTexte) {
    alert ('Les options    \"d?placement du texte par Drag and Drop (Glisser-D?poser)\"\net    \"d?filement automatique suivant la position du curseur\" \nsont incompatibles; elles ont ?t? ajout?es ? l\'option du mode pr?d?fini :'
            +'\n\n      '+options.mode+'\n\n Arbitrairement le syst?me conserve l\'option \"d?filement automatique\"');
  }
  
  if (options.DDInteractif != null) {
    if (options.DDInteractif) {
       this.opt['Mod'].AutoScrollSurTexte = false;
       this.opt['Mod'].DDInteractif       = true;
    }
    else {
       this.opt['Mod'].AutoScrollSurTexte = true;
       this.opt['Mod'].DDInteractif       = false;
    }
  }  
  // attention respectez l'ordre des tests
  if (options.AutoScrollSurTexte != null) {
    if (options.AutoScrollSurTexte) {
       this.opt['Mod'].AutoScrollSurTexte = true;
       this.opt['Mod'].DDInteractif       = false;
    }
    else {
       this.opt['Mod'].AutoScrollSurTexte = false;
       this.opt['Mod'].DDInteractif       = true;
    }
  }
/*
  this.opt['Mod'].DDInteractif       = (options.DDInteractif != null) ? options.DDInteractif
                                                                      : this.opt['Mod'].DDInteractif;
  this.opt['Mod'].AutoScrollSurTexte = (options.autoScrollSurTexte != null) ? options.autoScrollSurTexte
                                                                      : this.opt['Mod'].AutoScrollSurTexte;
*/                                                                      
}
else
// contr?le de compatibilit?
if (   this.opt['Mod'].DDInteractif
    && this.opt['Mod'].AutoScrollSurTexte) {
    alert ('Les options    \"d?placement du texte par Drag and Drop (Glisser-D?poser)\"\n et    \"d?filement automatique suivant la position du curseur\" \n sont incompatibles. \n\n Arbitrairement le syst?me choisi la deuxi?me option : d?filement automatique');
    this.opt['Mod'].DDInteractif       = false;
    this.opt['Mod'].AutoScrollSurTexte = true;
}
  
this.partieDoctCachee = true;
this.majListeEltsPresents();
this.majListeModalites();

// d?finition de l'objet Html consid?r? comme container
this.idObjComp = 'containerAS_' + ContainerAutoScroll.prototype.nbInstances ++;
if (!containerHtml ){  // il n'existe pas encore --> on le constitue / div texte
     this.containerHtml = document.createElement('DIV');

     this.containerHtml.style.width  = width;
     this.containerHtml.style.height = height;
     // par d?faut on r?cup?re le positionement de la div contenant le texte
     if (oHtmlTexte) {
       this.containerHtml.style.top = oHtmlTexte.style.top;
       this.containerHtml.style.left = oHtmlTexte.style.left;
     }
}
else{
  this.containerHtml = containerHtml;

}  

//this.containerHtml.className = 'cadreContainerAutoScroll';
this.containerHtml.className = 'container_AutoScroll';
this.containerHtml.oCiu = this;

this.containerHtml.id = this.idObjComp + '_cadreExt';

//--------------------------------------------------------
// si on pr?voit une bascule d un mode ? l autre , toutes les div sont cr??s et occult?es
// sinon les divs sont cr??s uniquement en fonction des options choisies

//----- une barre d' acces direct au haut du document
if (this.opt['Meta'].bascule || this.optionAccesHaut) {
  this.oHtmlAccesHaut = document.createElement('DIV');
  this.oHtmlAccesHaut.className = 'zoneAccesHaut';
  this.oHtmlAccesHaut.id = this.idObjComp + '_accesHaut';
// this.oHtmlAccesHaut.style.height = '18px';  
  this.oHtmlAccesHaut.oCiu      = this;
  this.oHtmlAccesHaut.onclick = ContainerAutoScroll.eventHandlers.onclickHaut;
  this.containerHtml.appendChild(this.oHtmlAccesHaut);
  this.oHtmlAccesHaut.className += ' masqueEltScroll';
}
//--- fenetre de visualisation du texte
this.oHtmlCadreInt = document.createElement('DIV');
this.oHtmlCadreInt.id = this.idObjComp + '_cadreInt';
this.oHtmlCadreInt.className = 'zoneTexte';
this.oHtmlCadreInt.oCiu = this;
this.oHtmlCadreInt.prctHZoneInerte = 0.1;
this.containerHtml.appendChild(this.oHtmlCadreInt);

 //----- une zone verticale plac?e ? droite avec 2 gradiants d intensit? de couleur pour figurer l'acc?l?ration du d?filement
//this.optionAscenseur = true; // pour test
if (this.opt['Meta'].bascule || this.optionAscenseur) {
   this.oHtmlAscenseur = document.createElement('DIV');     // div n?cessaire si 2 boutons figurent en plus des gradiants
   this.oHtmlAscenseur.oCiu = this;
//   this.oHtmlAscenseur.className = 'zoneAscenseur' + (this.optionAscenseurG ? ' gauche' : '');
   this.oHtmlAscenseur.className = 'zoneAscenseur';// + (this.optionAscenseurG ? ' gauche' : '');
   this.oHtmlCadreInt.appendChild(this.oHtmlAscenseur);
   this.oHtmlAscenseur.className += ' masqueEltScroll';

   this.oHtmlPiloteScroll = document.createElement('DIV');  // div n?cessaire ? la r?partition 50/50 des 2 gradiants
   this.oHtmlPiloteScroll.className = 'piloteScroll';
   this.oHtmlPiloteScroll.oCiu = this;
   this.oHtmlAscenseur.appendChild(this.oHtmlPiloteScroll);

//----- zone d acc?l?ration du d?filement vers le haut
   this.oHtmlAscSup = document.createElement('DIV');
   this.oHtmlAscSup.oCiu = this;
   this.oHtmlAscSup.className = 'ascenseurHaut';
   this.oHtmlPiloteScroll.appendChild(this.oHtmlAscSup);

   //----- zone d acc?l?ration du d?filement vers le bas
   this.oHtmlAscInf = document.createElement('DIV');
   this.oHtmlAscInf.oCiu = this;
   this.oHtmlAscInf.className = 'ascenseurBas';
   this.oHtmlPiloteScroll.appendChild(this.oHtmlAscInf);
}


if (this.opt['Meta'].bascule || this.optionAscenseurWin) {
   this.oHtmlAscenseurWin = document.createElement('DIV');     // div n?cessaire si 2 boutons figurent en plus des gradiants
   this.oHtmlAscenseurWin.oCiu = this;

   this.oHtmlAscenseurWin.className = 'zoneAscenseur';// + (this.optionAscenseurG ? ' gauche' : '');
//   this.oHtmlAscenseurWin.className = 'zoneAscenseur' + (this.optionAscenseurG ? ' gauche' : '');
   this.oHtmlCadreInt.appendChild(this.oHtmlAscenseurWin);
   this.oHtmlAscenseurWin.className += ' masqueEltScroll';

// n?cessaire pour firefox:
   this.oHtmlPiloteScrollWin = document.createElement('DIV');  // div n?cessaire ? la r?partition 50/50 des 2 gradiants
   this.oHtmlPiloteScrollWin.className = 'piloteScroll';
   this.oHtmlPiloteScrollWin.oCiu = this;
   this.oHtmlAscenseurWin.appendChild(this.oHtmlPiloteScrollWin);

/*
   divTemoin = new cursPartieFixe(131,230,20,300,'red');
   traceExec('cr?ation de oFixe2 = glissiere');
   document.body.appendChild(divTemoin);
*/
   var oFixe           = document.createElement('DIV');
   oFixe.className     = 'ascenseurWin';
   oFixe.style.display = 'none';       // pour disposer ds IE de l attribut css width


/*
//   document.body.appendChild(oFixe); // pb de lenteur ds ctxt explorateur
--> chargt direct des attributs avant reglement du pb peut ?tre li? au resize auto 
.ascenseurWin {
                     top: 0px; left : 0px;
                     width : 17px;
                     height : 100%;
                     background-color : rgb(63,187,239);
                     font-size : '0.5em';   
*/
oFixe.style.top = 0;
oFixe.style.left= 0;
oFixe.style.height = '100%';
//oFixe.style.backgroundColor = 'rgb(63,187,239)';
oFixe.style.fontSize = '0.5em';



   oFixe.id = 'cursPartieFixe_' + (++cursPartieFixe.prototype.nbInstances);
   oFixe.oCiu = this;   
/*    
  //  oFixe.style.position = 'absolute';
   oFixe.style.top    = 0; //top || 0;
   oFixe.style.left   = 0; //left || 0;
   oFixe.style.width  = 17;//5
   //width || 100;
   oFixe.style.height = '100%'; //height || 100;
   oFixe.style.backgroundColor = 'rgb(63,187,239)';

// oHtml.className = 'curseurZoneFixe';
// inutilisable avec IE car necessite le chargt ds la page 
// pour que les valeurs soient r?cup?rees  
// les val par d?faut sont donc donn?es ci-dessus en js
*/
   //var oFixe2 = new cursPartieFixe(0,0,17,'100%','green');
//autre possibilit?:   var oMob = new cursPartieMobile(0,0,getComputStyle(oFixe,'width'),20);//,'rgb(146,220,0)');

   // technique d inscription pr?alable ds le doct rendue n?cessaire par IE si on veut placer les sp?cifs ds 1 css
   // car ds ce cas IE ne donne acc?s aux sp?cifs de la css (par currentStyle) que lorsque l'elt HTml 
   // est charg? ds le doct (contrairement ? FireFox avec getComputedStyle)
   // de plus le chargt de oMob.style est par ailleurs n?cessaire 
   // (d'o? la n?cessit? d'acc?s aux sp?cifs css)
   // CurseurMobile n'utilisant pas syst?matiquement getComputStyle

   var oMob           = document.createElement('DIV');

   oMob.className = 'cursAscenseurWin';
   oMob.style.display = 'none';


/*
   document.body.appendChild(oMob);  pb de lenteur -> remplact par affectat? directe attributs ? revoir
   css  .cursAscenseurWin :
                     top: 0px; left : 0px;     
                     height : 10px;
                     background-color : rgb(146,220,0);
                     border : '1px black outset';
                     font-size : '0.5em';   
*/
   oMob.style.top = 0; //getComputStyle(oMob,'top');
   oMob.style.left = 0; //getComputStyle(oMob,'left');
   oMob.style.height = 10; //getComputStyle(oMob,'height');  
   oMob.style.width = ''; //getComputStyle(oFixe,'width');  // m?me largeur que la zone fixe   

   oMob.style.fontSize = '0.5em';
//   oMob.style.backgroundColor = 'rgb(146,220,0)';
//   oMob.style.border = '1px black outset';
   oMob.style.border = '2px white outset';



   oMob.oCiu = this;
   oMob.id = 'cursPartieMobile_' + (++cursPartieMobile.prototype.nbInstances);

   this.cursTemoinPos = new CurseurMobile(
                             oFixe
                            ,oMob
                            ,{  mobilite:    'DragAndDrop'
                               ,orientation: 'v'
                               ,posRelI:     {top:0, left:0}
                               ,bRectLim :   true
                               ,majDyn   :   true
                               ,rectLim:     {top:0,left:0,bottom:'this.oHtmlFixe.offsetHeight'}
                               ,circulaire:  false}
                            ,0
                            );
   oFixe.style.display = 'block';
   oMob.style.display = 'block';

   this.cursTemoinPos.placeIn(this.oHtmlPiloteScrollWin,0,0,'relative');

   // pr?paration du couplage du texte comme curseur avec le curseur-t?moin de position
   this.hCurs = new CouplageCurseurs(0);
   traceExec('avant add this.cursTemoinPos = '+this.cursTemoinPos,9);
   this.hCurs.add(this.cursTemoinPos);
}
// pour test: pour disposer d'1oHtml stable propre au container  cf. / curseur 
// et faciliter ainsi les copies de buffer cf saveBuffer restoreBuffer
/*
//--- zone d inscription du texte glissante / fenetre de visualisation
if (oHtmlTexte){
    if (this.optionPasDeCloneContenuPasse)
        this.oHtmlTexte = oHtmlTexte;   
    else
        this.oHtmlTexte = oHtmlTexte.cloneNode(true);

    // pour forcer les attributs de la css en lieu et place de ceux fix?s inline
    this.oHtmlTexte.style.position = '';
    this.oHtmlTexte.style.top = '';
    this.oHtmlTexte.style.left = '';
    
    }
else{

    this.oHtmlTexte = document.createElement('DIV');
}    
*/

this.oHtmlTexte = document.createElement('DIV');
if (oHtmlTexte){
    
    oHtmlTexte.style.backgroundColor = ''; // pour forcer les attributs de la css en lieu et place de ceux fix?s inline
//    oHtmlTexte.className = 'texteI';

    var heightRef = oHtmlTexte.offsetHeight;
    if (this.optionPasDeCloneContenuPasse){
        oHtmlTexte.style.top  = 0;   // attention effet de bord  depuis qu'1 div oHtmlTexte propre au container est cr??
        oHtmlTexte.style.left = 0;
        oHtmlTexte.style.position = 'relative';
        this.oHtmlTexte.appendChild(oHtmlTexte);
    }
    else {
        var clo = oHtmlTexte.cloneNode(true);
        clo.style.top = 0;
        clo.style.left = 0;
        clo.style.position = 'relative';
//        alert('color = '+clo.style.backgroundColor+ ' '+oHtmlTexte.style.backgroundColor);
        this.oHtmlTexte.appendChild(clo);
    }
}

this.oHtmlTexte.className = 'texte';
if (window.getComputedStyle == undefined)
//   comporte 1 overflowX = 'hidden';
      this.oHtmlTexte.className += ' texteIE';
    
this.oHtmlTexte.style.top = 0;
this.oHtmlTexte.style.left = 0;
this.oHtmlTexte.id = 'idTexte'; // pour test

// initialisation systeme de buffers
//this.lBuff = new Pile();
this.lBuff = new Array();
//alert('Containerautoscroll constructeur -> createBuffer');
this.noCurrentBuff = this.createBuff();
this.oHtmlTexte.id = this.idObjComp + '_buffActif_' + this.noCurrentBuff;

this.bBuffMod      = true;

/*inutile pourvu que l'oHtmlTexte inclut ne soit pas du type position absolute d'o? clo.style.position= 'relative'..
if (oHtmlTexte)
   this.oHtmlTexte.style.height = heightRef; 
*/
var testHTexte = document.createElement('DIV');
testHTexte.className = 'texte';
testHTexte.style.visibility='hidden';
var uneLigne = document.createTextNode('pour evaluer la hauteur en pixel d une ligne');
testHTexte.appendChild(uneLigne);
document.body.appendChild(testHTexte);
this.oHtmlTexte.pxHLine = parseInt(testHTexte.offsetHeight);
document.body.removeChild(testHTexte);


  this.oHtmlCadreInt.appendChild(this.oHtmlTexte);
/*  r?alis? en asynchrone voir + bas (asynchrone n?cessaire si majDyn:true mais pas suffisant  ? revoir)
   this.cursTexte = new CurseurMobile( this.oHtmlCadreInt
                                      , this.oHtmlTexte
                                      ,{  mobilite:'DragAndDrop' 
                                         ,orientation:'v'
                                         ,complementProp : true
                                         ,majDyn : false
                                         ,rectLim :{
                                                     top: '-(this.oHtmlMobile.offsetHeight - parseInt(this.oHtmlFixe.style.height))'
                                                     ,bottom:'this.oHtmlMobile.offsetHeight'}
                                        }
                                        ,0);

*/

//this.oHtmlTexte.style.zIndex = 0;
//alert('Ascenseur : '+this.oHtmlAscenseur.style.zIndex+' Texte: '+this.oHtmlTexte.style.zIndex);
//if (this.optionAscenseur)
//  this.oHtmlAscenseur.style.zIndex = this.oHtmlTexte.style.zIndex + 1;
//alert('Ascenseur : '+this.oHtmlAscenseur.style.zIndex+' Texte: '+this.oHtmlTexte.style.zIndex);
//----- une barre d' acces direct au haut du document
if (this.opt['Meta'].bascule || this.optionAccesBas) {
   this.oHtmlAccesBas = document.createElement('DIV');
   this.oHtmlAccesBas.className = 'zoneAccesBas';
   this.oHtmlAccesBas.id = this.idObjComp + '_accesBas';
   this.oHtmlAccesBas.oCiu = this;
   this.containerHtml.appendChild(this.oHtmlAccesBas);

   this.oHtmlAccesBas.onclick = ContainerAutoScroll.eventHandlers.onclickBas;
   this.oHtmlAccesBas.className += ' masqueEltScroll';
}

//-----------  placement des fleches eventuelles ----------------
//--------- un bouton d'acc?s direct au haut du document
if (this.opt['Meta'].bascule || this.optionAscHautFleche) {
    this.oHtmlAscHautFleche = document.createElement('DIV');          // zone fleche vers le haut
    this.oHtmlAscHautFleche.oCiu = this;
    this.oHtmlAscHautFleche.className = 'zoneHautFlecheDirect';
//    this.oHtmlAscHautFleche.className = 'zoneAscHautFleche';
    this.oHtmlAscHautFleche.onclick = ContainerAutoScroll.eventHandlers.onclickHaut;
    this.oHtmlAscHautFleche.className += ' masqueEltScroll';
  }
if (this.opt['Meta'].bascule || this.optionAscHautFlecheWin) {
    this.oHtmlAscHautFlecheWin = document.createElement('DIV');          // zone fleche vers le haut
    this.oHtmlAscHautFlecheWin.oCiu = this;
    this.oHtmlAscHautFlecheWin.className = 'zoneAscHautFleche';
    this.oHtmlAscHautFlecheWin.className += ' masqueEltScroll';
  }
  //--------- un bouton d'acc?s direct au bas du document
if (this.opt['Meta'].bascule || this.optionAscBasFleche) {
    this.oHtmlAscBasFleche = document.createElement('DIV');          // zone fleche vers le bas
    this.oHtmlAscBasFleche.oCiu = this;
//    this.oHtmlAscBasFleche.className = 'zoneAscBasFleche';
    this.oHtmlAscBasFleche.className = 'zoneBasFlecheDirect';
    this.oHtmlAscBasFleche.onclick = ContainerAutoScroll.eventHandlers.onclickBas;
    this.oHtmlAscBasFleche.className += ' masqueEltScroll';

}
  //--------- un bouton d'acc?s direct au bas du document
if (this.opt['Meta'].bascule || this.optionAscBasFlecheWin) {
    this.oHtmlAscBasFlecheWin           = document.createElement('DIV');          // zone fleche vers le bas
    this.oHtmlAscBasFlecheWin.oCiu      = this;
    this.oHtmlAscBasFlecheWin.className = 'zoneAscBasFleche';
    this.oHtmlAscBasFlecheWin.className += ' masqueEltScroll';
}

if  (this.optionAscHautFleche){
     // bouton dans bande acces direct
     if (this.optionAccesHaut) {
        this.oHtmlAccesHaut.className += ' zoneAccesElargie';
        this.oHtmlAscHautFleche.className += ' dansZoneAccesHB';
        this.oHtmlAccesHaut.appendChild(this.oHtmlAscHautFleche);
     }
     // bouton dans ascenseur
     else
     if (this.optionAscenseur) 
        this.oHtmlAscenseur.insertBefore(this.oHtmlAscHautFleche,this.oHtmlPiloteScroll);
     
}
if  (this.optionAscHautFlecheWin)
        this.oHtmlAscenseurWin.insertBefore(this.oHtmlAscHautFlecheWin,this.oHtmlPiloteScrollWin);

if  (this.optionAscBasFleche){
     // bouton dans bande acces direct
     if (this.optionAccesBas) {
        this.oHtmlAccesBas.className += ' zoneAccesElargie';
        this.oHtmlAscBasFleche.className += ' dansZoneAccesHB'
        this.oHtmlAccesBas.appendChild(this.oHtmlAscBasFleche);
     }
     // bouton dans ascenseur
     else
     if (this.optionAscenseur) 
        this.oHtmlAscenseur.appendChild(this.oHtmlAscBasFleche);
}
if  (this.optionAscBasFlecheWin)
        this.oHtmlAscenseurWin.insertBefore(this.oHtmlAscHautFlecheWin,this.oHtmlPiloteScrollWin);


// a revoir est ce utile ? : this.positionAscenseur();
/*
if   (this.oHtmlTexte.offsetHeight >  parseInt(this.oHtmlCadreInt.style.height)) {
   // application des options de pr?sence d elts d interface dedi?s au scroll
   this.fixeEltScroll(null,null,true);  
   // application des options de modalit?s particuli?res de focntionnement de certains elts de l interface
   this.fixeModalitesParticulieres();
}
*/

// enregistrement de oHtmlTexte et oHtmlCadreInt comme curseur : pas indispensable 
// seulement si l'on veut par exemple associer au d?filement un t?moin de position relative de la zone affich?e
// par rapport au texte complet
this.zoneTexteCommeCurseur = function () {
//=============================
   //traceExec('--> .zoneTexteCommeCurseur',1);
   this.cursTexte = new CurseurMobile( this.oHtmlCadreInt           // pour oHtmlFixe
                                      , this.oHtmlTexte             // pour oHtmlMobile
                                      ,{  mobilite:'DragAndDrop' 
                                         ,orientation:'v'
                                         ,complementProp : true
                                         //,majDyn : false
                                         ,rectLim :{
                                                     top: '-(   parseInt(this.oHtmlMobile.offsetHeight) '
                                                        + '     - Math.min('
                                                        + '           parseInt(this.oHtmlFixe.style.height),'
                                                        + '            (  parseInt(this.oHtmlMobile.offsetHeight)'
                                                        + '             - Math.abs(parseInt(this.oHtmlMobile.style.top))))'
//                                                        + '             + parseInt(this.oHtmlMobile.style.top)))'
                                                        + ' )'
//                                                              - parseInt(this.oHtmlFixe.style.height))'
                                                     ,bottom:'this.oHtmlMobile.offsetHeight'}
                                        }
                                        ,0);
  //blocage du DD effectif (on ne conserve que les limites charg?es de DD ) 
                                         
    
  if (!this.opt['Mod'].DDInteractif)  
     this.oHtmlTexte.dragAndDrop = false;
// inutile ?

if (this.optionAscenseurWin){
  // couplage du texte comme curseur avec le curseur-t?moin de position
    traceExec('avant couplageAscenseurTexte this.cursTexte = '+this.cursTexte,9);
//  this.hCurs.add(this.cursTexte);
   // a conserver malgr? l'appel dpeuis fixeEltScroll->basculeScroll->gereAscenseur
   // car this.cursTexte n'est alors pas encore connu
    this.couplageAscenseurTexte(true);
  }
}
// asynchrone (cf global.js) car n?cessite parfois le placement dans le document (par ex si cadreExt.style.height est un pourcentage)
//execAfterLoad(this.containerHtml.id,'computeDims');       

execAfterLoad(this.containerHtml.id,'affInterfaceScroll');       



traceExec('execAfterLoad(this.containerHtml.id = '+this.containerHtml.id+' ,"zoneTexteCommeCurseur"',74);
//execAfterLoad(this.containerHtml.id,'zoneTexteCommeCurseur');    // utile si majDyn = false mais autre pb ? voir  

// this.oHtmlCadreInt.style.height = '100%'
// ne fonctionne pas car il s agit alors de 100% du parent et les zone haute et basse ?ventuelle ne sont pas retranch?e
// peut donc se concevoir s'il n'y a pas de zones accesHaut accesBas

if (parent)
  this.placeIn(parent,top,left);

this.containerHtml.onresize = function (){
//========================================
// a voir
// si les dimensions de containerHtml sont exprim?es en %  
// un redimensionnement du contexte d?clenchera onresize : il s'agit alors de r?gler les dimensions
// des elements internes en fonction de ce redimensionnement
// le pb est :
//   la nouvelle taille de containerHtml est-elle accessible ?
//this.oCiu.computeDims();
}


// essai de menu contextuel / momde affichage
//ContainerAutoScroll.prototype.listeModePreDef = 
//'TextDDAscenseurWin#TextDDAscAutoDebFinTemoin#AscenseurAuto#AscenseurWin#AscenseurAutoTemoin#TextAutoMin#TextAutoDebFin#TextAutoDebFinTemoin#NoScroll#TextDDTemoin#TextDDDebFinTemoin#';

this.tMode = new Array (6);
this.tMode[0] = new Array(2);
// french this.tMode[0][0] = 'Ascenseur type window' ;
this.tMode[0][0] = 'windows type Lift' ;
    this.tMode[0][1] = 'AscenseurWin';
this.tMode[1] = new Array(2);
// french this.tMode[1][0] = "Ascenseur type window + DragAndDrop / texte";
this.tMode[1][0] = "windows type Lift + DragAndDrop / Text";
    this.tMode[1][1] = "TextDDAscenseurWin";
this.tMode[2] = new Array(2);
// french this.tMode[2][0] = "Defilement automatique avec gradient vitesse / ascenseur";
this.tMode[2][0] = "automatic Scroll with variable Speed / Lift";
    this.tMode[2][1] = "AscenseurAuto";
this.tMode[3] = new Array(2);
// frenchthis.tMode[3][0] = "idem + t?moin de position";
this.tMode[3][0] = "the same + Indicator of position";
    this.tMode[3][1] = "AscenseurAutoTemoin";
this.tMode[4] = new Array(2);
// french this.tMode[4][0] = "Defilement automatique avec gradient vitesse / texte";
this.tMode[4][0] = "automatic Scroll with variable Speed / Text";
    this.tMode[4][1] = "TextAutoMin";
this.tMode[5] = new Array(2);
// french this.tMode[5][0] = "idem + t?moin de position + barres deb-fin";
this.tMode[5][0] = "the same + Indicator of position + top-bottom Area";
    this.tMode[5][1] = "TextAutoDebFinTemoin";

this.menuContext = new objMenuCont('mCtxtEditeur',400);
this.menuContext.createMenu(this.containerHtml);
this.menuContext.oCiu = this;

this.menuContext.add (this.tMode[0][0],actif=true,true);
this.menuContext.add (this.tMode[1][0],actif=true,true,true);
this.menuContext.addSeparation();

this.menuContext.add (this.tMode[2][0],actif=true,true);
this.menuContext.add (this.tMode[3][0],actif=true,true);
this.menuContext.addSeparation();

this.menuContext.add (this.tMode[4][0],actif=true,true);
this.menuContext.add (this.tMode[5][0],actif=true,true);

this.containerHtml.oCiu = this;
this.containerHtml.oncontextmenu = function(e) {
    var menu = this.oCiu.menuContext;
    menu.cible = null;
    menu.afficheMenu(e);
}

this.menuContext.itemClickApplicatif = function(i) {
// i = index de l item s?lectionn? ds le menu ctxtuel
var modeChoisi = this.oCiu.tMode[i][1];
this.oCiu.autoScroll(modeChoisi);


}


}

ContainerAutoScroll.prototype.nbInstances = 0;

ContainerAutoScroll.prototype.listeEltsScroll = 
'Ascenseur#AscenseurWin#AccesHaut#AccesBas#AscHautFleche#AscBasFleche#AscHautFlecheWin#AscBasFlecheWin#';
//ContainerAutoScroll.prototype.listeModalites =  
//'DDInteractif#AutoScrollSurTexte#TemoinPos#ScrollSurTemoinPos#PosAsc#PosAscWin#AscWinFin#';
ContainerAutoScroll.prototype.listeModalites =  
'DDInteractif#AutoScrollSurTexte#TemoinPos#ScrollSurTemoinPos#PosAscLeft#PosAscWinLeft#AscWinFin#';

// predef : typologie ? revoir !
ContainerAutoScroll.prototype.listeModePreDef = 
'TextDDAscenseurWin#TextDDAscAutoDebFinTemoin#AscenseurAuto#AscenseurWin#AscenseurAutoTemoin#TextAutoMin#TextAutoDebFin#TextAutoDebFinTemoin#NoScroll#TextDDTemoin#TextDDDebFinTemoin#';
//#Zones#Mixte#TemoinDD#TemoinAuto#
ContainerAutoScroll.prototype.modePreDefEltsPresents = {
           AscenseurAuto       : ['Ascenseur','AscHautFleche','AscBasFleche']
          ,AscenseurWin        : ['AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
          ,AscenseurAutoTemoin : ['AscenseurWin','Ascenseur','AscHautFleche','AscBasFleche']
          
          ,TextAutoMin          : []
          ,TextAutoDebFin       : ['AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
          ,TextAutoDebFinTemoin : ['AccesBas','AccesHaut','AscenseurWin','AscHautFleche','AscBasFleche']

          ,TextDDTemoin       : ['AscenseurWin']
          ,TextDDDebFinTemoin : ['AscenseurWin','AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
          
          ,TextDDAscAutoDebFinTemoin : ['AscenseurWin','Ascenseur','AscHautFleche','AscBasFleche']

          ,TextDDAscenseurWin : ['AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']

            ,NoScroll      : []
/*
          ,Zones         : ['AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
          ,Mixte         : ['Ascenseur','AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
          ,TemoinAuto    : ['AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
          ,TemoinDD      : ['AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
*/
}
ContainerAutoScroll.prototype.modePreDefEltsAbsents = {
           AscenseurAuto : ['AccesBas','AccesHaut','AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
          ,AscenseurWin  : ['AccesBas','AccesHaut','Ascenseur','AscHautFleche','AscBasFleche']
          ,AscenseurAutoTemoin : ['AccesBas','AccesHaut','AscHautFlecheWin','AscBasFlecheWin']

          ,TextAutoMin : ['Ascenseur','AscenseurWin','AccesBas','AccesHaut','AscHautFleche','AscBasFleche','AscHautFlecheWin','AscBasFlecheWin']
          ,TextAutoDebFin : ['Ascenseur','AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
          ,TextAutoDebFinTemoin : ['Ascenseur','AscHautFlecheWin','AscBasFlecheWin']

          ,TextDDTemoin :  ['Ascenseur','AccesBas','AccesHaut','AscHautFleche','AscBasFleche','AscHautFlecheWin','AscBasFlecheWin']
          ,TextDDDebFinTemoin :  ['Ascenseur','AscHautFlecheWin','AscBasFlecheWin']
          
          ,TextDDAscAutoDebFinTemoin : ['AccesBas','AccesHaut','AscHautFlecheWin','AscBasFlecheWin']

            ,TextDDAscenseurWin : ['AccesBas','AccesHaut','Ascenseur','AscHautFleche','AscBasFleche']

            ,NoScroll      : ['Ascenseur','AscenseurWin','AccesBas','AccesHaut','AscHautFleche','AscBasFleche','AscHautFlecheWin','AscBasFlecheWin']
/*
          ,Zones         : ['Ascenseur','AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
          ,Mixte         : ['AscenseurWin','AscHautFlecheWin','AscBasFlecheWin']
          ,TemoinAuto    : ['Ascenseur','AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
          ,TemoinDD      : ['Ascenseur','AccesBas','AccesHaut','AscHautFleche','AscBasFleche']
*/
}
ContainerAutoScroll.prototype.modePreDefComportements = {
           AscenseurAuto : ['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = false','TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']
          ,AscenseurWin  : ['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = false','TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']
          ,AscenseurAutoTemoin : ['AscWinFin=true','DDInteractif = false','AutoScrollSurTexte = false' ,'TemoinPos=true','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=true']        

          ,TextAutoMin :['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = true' ,'TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']
          ,TextAutoDebFin :['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = true' ,'TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']
          ,TextAutoDebFinTemoin :['AscWinFin=true','DDInteractif = false','AutoScrollSurTexte = true' ,'TemoinPos=true','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=true']
          
          ,TextDDTemoin : ['AscWinFin=true','DDInteractif = true','AutoScrollSurTexte = false' ,'TemoinPos=true','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=true']
          ,TextDDDebFinTemoin : ['AscWinFin=true','DDInteractif = true','AutoScrollSurTexte = false' ,'TemoinPos=true','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=true']

          ,TextDDAscAutoDebFinTemoin : ['AscWinFin=true','DDInteractif = true','AutoScrollSurTexte = false' ,'TemoinPos=true','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=true']

          ,TextDDAscenseurWin :['AscWinFin=false','DDInteractif = true','AutoScrollSurTexte = false' ,'TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']

          ,NoScroll      : ['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = false','TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']        
/*
          ,Zones         : ['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = true' ,'TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']
          ,Mixte         : ['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = false','TemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']        
          ,TemoinAuto    : ['AscWinFin=false','DDInteractif = false','AutoScrollSurTexte = true' ,'TemoinPos=true','ScrollSurTemoinPos=false','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']        
          ,TemoinDD      : ['AscWinFin=false','DDInteractif = true' ,'AutoScrollSurTexte = false','TemoinPos=true','ScrollSurTemoinPos=false','PosAscLeft=false','PosAscWinLeft=false']        
*/
}

ContainerAutoScroll.prototype.heightMinCursTemoinPos = 10;

ContainerAutoScroll.prototype.majListeEltsPresents = function (elt,mode) {
//================================================
// private
// argts <elt> et <mode> optionnels
// Maj de la liste des elts de scroll demand?s
//      si <elt> = null : reconstitution de la liste ? partir de la liste de r?f?rence de ts les elts possibles 
//                      et de la valeur bool?enne des attributs correspondants
//      si <elt>  ajout ou suppression de la liste suivant la valeur de l' argt <mode> : 'ajout' ou <autre>
//
// la liste est de la forme : Ascenseur#AscenseurWin#AccesHaut#AccesBas#

  // reconstitution de la liste compl?te ? partir de l'?tat actuel des attributs
 traceExec('majListe deb  this.listeEltsPresents= '+this.listeEltsPresents,9);
 traceExec('majListe deb  this.listeEltsAbsents= '+this.listeEltsAbsents,9);
  var listeEltsPresents='', listeEltsAbsents='';
  if (!elt) {
    var opt;
    var tlisteElts = new Array();
    tlisteElts = ContainerAutoScroll.prototype.listeEltsScroll.split('#');
    tlisteElts.pop();
    for (var i=0; i <tlisteElts.length; i++ ) {
       opt = tlisteElts[i];
       if (eval('this.option'+opt)) 
         listeEltsPresents = listeEltsPresents + opt + '#';
       else
         listeEltsAbsents = listeEltsAbsents + opt + '#';
    }
    if (this.partieDoctCachee) {
       this.listeEltsPresents = listeEltsPresents;
       this.listeEltsAbsents  = listeEltsAbsents;
    }
    else {
       this.svgListeEltsPresents = listeEltsPresents;
       this.svgListeEltsAbsents  = listeEltsAbsents;
    }

  }
  // ajout ou retrait d'un elt de la liste
  else { 
    traceExec('majListe '+ (this.partieDoctCachee ? 'doct cach?': 'doct visible')+' svg mode= '+mode,9);
    var regExp = new RegExp(elt+'#');
    if (this.partieDoctCachee) { 
        if (mode=='ajout') {
          if (this.listeEltsPresents.indexOf(elt+'#') == - 1)
            this.listeEltsPresents += elt + '#';
          this.listeEltsAbsents= this.listeEltsAbsents.replace(regExp,'');
         
        }
        else {
          this.listeEltsPresents = this.listeEltsPresents.replace(regExp,'');
          if (this.listeEltsAbsents.indexOf(elt+'#') == - 1)
            this.listeEltsAbsents += elt + '#';
        }
    }
    else {
        if (mode=='ajout') {
          if (this.svgListeEltsPresents.indexOf(elt+'#') == - 1)
            this.svgListeEltsPresents += elt + '#';
          this.svgListeEltsAbsents= this.svgListeEltsAbsents.replace(regExp,'');
         
        }
        else {
          this.svgListeEltsPresents= this.svgListeEltsPresents.replace(regExp,'');
          if (this.svgListeEltsAbsents.indexOf(elt+'#') == - 1)
            this.svgListeEltsAbsents += elt + '#';
        }
    }
  }
 traceExec('majListe  this.listeEltsPresents= '+this.listeEltsPresents,9);
 traceExec('majListe  this.listeEltsAbsents= '+this.listeEltsAbsents,9);
  
}

ContainerAutoScroll.prototype.majListeModalites = function () {
//================================================
// private
// Reconstitution de la liste actuelle des modalites ? partir des valeurs booleennes des attributs correspondants
// la liste est de la forme : DDInteractif=false#AutoScrollSurTexte=false#TemoinPos=false#ScrollSurTemoinPos=false#
traceExec('majListeModalites entree',31);
   var modalite;
   var tlisteMods = new Array();
   tlisteMods = ContainerAutoScroll.prototype.listeModalites.split('#');
   tlisteMods.pop();
   this.listeModalites = '';
   for (var i=0; i <tlisteMods.length; i++ ) {
       modalite = 'this.opt["Mod"].'+tlisteMods[i];
       this.listeModalites =   this.listeModalites 
                             + tlisteMods[i] + ' = '+ (eval(modalite)? 'true':'false')
                             + '#';
traceExec('majListeModalites mod '+tlisteMods[i]+' = '+eval(modalite),31);
   }
traceExec('majListeModalites = ' + this.listeModalites,31);
}

ContainerAutoScroll.prototype.couplageTexteAvecCursExt = function (coupleur) {
//======================================================================
if (coupleur)
  coupleur.add(this.cursTexte);
}

ContainerAutoScroll.prototype.couplageDeCursExt = function (curs) {
//======================================================================
if (!this.hCurs) {
  this.hCurs = new CouplageCurseurs();   // 0 a revoir
  if (this.cursTexte) {
     // this.hCurs.majPosCurs(this.cursTexte.calculProp());  // il n'y avait plus de couplage --> il faut mettre
//      this.hCurs.add(this.cursTexte,majTousCurs=true,this.cursTexte.calculProp());                    // ? jour la prop d?tenue par le handler hCurs
        this.cursTexte.loadLimitsDyn();  // pour avoir les dim dependantes de oHtmlPiloteScroll ? jour
        this.hCurs.add(this.cursTexte,majTousCurs=true);                    // ? jour la prop d?tenue par le handler hCurs
  }
}
this.hCurs.add(curs);
}

ContainerAutoScroll.prototype.couplageAscenseurTexte = function (couplage){
//=======================================================
if (!this.hCurs)
//  this.hCurs = new CouplageCurseurs(0);   // 0 a revoir
  this.hCurs = new CouplageCurseurs();   // 0 a revoir
  
if (couplage) {  
traceExec('couplageAscenseurTexte avant add this.cursTexte = '+this.cursTexte,10);
   // tests ? conserver car ? l'initialisation depuis le constructeur ds le mode AscenseurWin
   //cursTexte n'existe pas encore et couplageAsc.. est rappell? ult?rieurement
   
    if (this.cursTexte) {
     // this.hCurs.majPosCurs(this.cursTexte.calculProp());  // il n'y avait plus de couplage --> il faut mettre
//      this.hCurs.add(this.cursTexte,majTousCurs=true,this.cursTexte.calculProp());                    // ? jour la prop d?tenue par le handler hCurs
        this.cursTexte.loadLimitsDyn();  // pour avoir les dim dependantes de oHtmlPiloteScroll ? jour
        this.hCurs.add(this.cursTexte,majTousCurs=true);                    // ? jour la prop d?tenue par le handler hCurs
    }
traceExec('couplageAscenseurTexte avant add this.cursTemoinPos = '+this.cursTemoinPos,10);
   if (this.cursTemoinPos) this.hCurs.add(this.cursTemoinPos);
}
else {
traceExec('couplageAscenseurTexte avant rem this.cursTemoinPOs = '+this.cursTemoinPos,10);
   this.hCurs.remove(this.cursTemoinPos);
   if (this.hCurs.nbEltsCouples == 1) {
      traceExec('couplageAscenseurTexte avant rem this.cursTexte = '+this.cursTexte,10);
      this.hCurs.remove(this.cursTexte);
    }
}
}

ContainerAutoScroll.prototype.autoScrollSurTexte = function (suppression) {
//==============================================
// assure ou supprime (? moins qu'un minimum requis de possibilit? de scroll l'exige)
// la possibilit? de scroll par placement du curseur sur le texte
//traceExec('fl autoScrollSurTexte suppression= '+suppression,1);
//   correspond ? l'attribut de modalit? : AutoScrollSurTexte
  if (suppression) {
     this.oHtmlCadreInt.onmousemove = null;
     this.oHtmlCadreInt.onclick     = null;
     this.oHtmlCadreInt.onmouseout  = null;
     this.opt['Mod'].AutoScrollSurTexte= false;
     
     this.autoScrollMin();
  }
  else {
  //traceExec('containerAutoScroll autoScrollSurTexte aj mm hdler',1);
     this.oHtmlCadreInt.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
     this.oHtmlCadreInt.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
     this.oHtmlCadreInt.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;      
//   correspond ? l'attribut de modalit? : 
     this.opt['Mod'].AutoScrollSurTexte = true;
  }
this.majListeModalites();
}

ContainerAutoScroll.prototype.zoneAscModeInteractif = function (interactif){
//=======================================================
// contr?le la possibilit? de
// deplacement du curseur qui mat?rialise la position de la portion de texte affich?e / texte complet
//  true : DD possible comme pour un ascenseur Windows classique
//  false: pas de DD possible le d?placement provient uniquement de la synchronisation avec le d?placement du texte

//   correspond ? l'attribut de modalit? : TemoinPos
if (interactif){
  this.cursTemoinPos.oHtmlMobile.dragAndDrop = true;
  this.opt['Mod'].TemoinPos = false;
}
else {
  this.cursTemoinPos.oHtmlMobile.dragAndDrop = false;
  this.opt['Mod'].TemoinPos = true;
}
this.autoScrollMin();

this.majListeModalites();
}

ContainerAutoScroll.prototype.zoneTemoinScrollAuto = function (auto){
//=======================================================
// contr?le la possibilit? de
// deplacement automatique en fonction de la position du pointeur / zone t?moin de la position ds le texte
//  true : scroll automatique par position de la souris sur la bande t?moin de position
//  false: pas de scroll lorsque la souris est positionn?e sur la bande t?moin de position

//   correspond ? l'attribut de modalit? : ScrollSurTemoinPos
if (auto)
  this.fixeModalitesParticulieres('ScrollSurTemoinPos=true');

else 
  this.fixeModalitesParticulieres('ScrollSurTemoinPos=false');

this.majListeModalites();
}

ContainerAutoScroll.prototype.zoneAffModeInteractif = function (interactif){
//=================================================
//   correspond ? l'attribut de modalit? : DDInteractif
//traceExec('fl zoneAffModeInteractif',1);
if (interactif) {
  this.opt['Mod'].DDInteractif = true;
  this.oHtmlTexte.dragAndDrop = true;
  this.oHtmlCadreInt.onmousemove = null; //ContainerAutoScroll.eventHandlers.onmousemove;
  this.oHtmlCadreInt.onclick     = null; //ContainerAutoScroll.eventHandlers.onclickCentre;
  this.oHtmlCadreInt.onmouseout  = null; //ContainerAutoScroll.eventHandlers.onmouseout;
}

else   {
  this.opt['Mod'].DDInteractif = false;
  this.oHtmlTexte.dragAndDrop = false
  if (   !this.optionAscenseur 
      && (   !this.optionAscenseurWin
          || this.opt['Mod'].TemoinPos)
      &&  this.opt['Meta'].CoherenceAuto) {          
   this.oHtmlCadreInt.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
   this.oHtmlCadreInt.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
   this.oHtmlCadreInt.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;
  }
} 
  this.majListeModalites();
 
}

ContainerAutoScroll.prototype.barreTemoinPosEtroite = function (etroite) {
//=============================================================
  // regle la largeur de l' ascenseur avec temoin de position / texte entier : ?troit ou large
 if (this.oldLargTemoin == etroite) return;
 
 this.oldLargTemoin = etroite;
 // large --> etroit
 if (etroite) {
    this.opt['Mod'].AscWinFin = true;
    this.cursTemoinPos.oHtmlFixe.style.width = this.valCssEtroit; 
    this.cursTemoinPos.oHtmlMobile.style.width = this.valCssEtroit;
    this.oHtmlAscenseurWin.className += ' etroit';

    if (window.getComputedStyle != undefined){
        this.oHtmlTexte.style.width = parseInt(this.oHtmlTexte.style.width)// + 12;
                                   + (    parseInt(this.valCssLarge)
//                                   - (    parseInt(this.valCssLarge)
                                      -   parseInt(this.valCssEtroit));
        if (this.oldPosAscWin == 'left')
            this.oHtmlTexte.style.left =   parseInt(this.oHtmlTexte.style.left)
                                         - (    parseInt(this.valCssLarge)
                                            -   parseInt(this.valCssEtroit));
    }

    if (this.optionAscHautFlecheWin) {
//        this.oHtmlAscHautFlecheWin.className = 'zoneAscHautFleche';
        this.oHtmlAscHautFlecheWin.className += ' etroitFleche';
    }
    if (this.optionAscBasFlecheWin) {
        this.oHtmlAscBasFlecheWin.className += ' etroitFleche';
    }

//    this.cursTemoinPos.oHtmlMobile.className += ' etroit'; //ne fctionne pas pourquoi ???
//    this.cursTemoinPos.oHtmlFixe.className   += ' etroit';
   }
 // etroit --> large
  else {
    this.opt['Mod'].AscWinFin = false;
//    this.cursTemoinPos.oHtmlFixe.className = this.cursTemoinPos.oHtmlFixe.className.replace(/ etroit/g,'');
//    this.cursTemoinPos.oHtmlMobile.className = this.cursTemoinPos.oHtmlMobile.className.replace(/ etroit/g,'');
    this.cursTemoinPos.oHtmlFixe.style.width = this.valCssLarge; 
    this.cursTemoinPos.oHtmlMobile.style.width = this.valCssLarge;  
    this.oHtmlAscenseurWin.className = this.oHtmlAscenseurWin.className.replace(/ etroit/g,'');

    if (window.getComputedStyle != undefined){
        this.oHtmlTexte.style.width = parseInt(this.oHtmlTexte.style.width)// + 12;
                                   - (    parseInt(this.valCssLarge)
//                                   + (    parseInt(this.valCssLarge)
                                      -   parseInt(this.valCssEtroit));
        if (this.oldPosAscWin == 'left')
            this.oHtmlTexte.style.left =   parseInt(this.oHtmlTexte.style.left)
                                         + (    parseInt(this.valCssLarge)
                                            -   parseInt(this.valCssEtroit));
    }
    if (this.optionAscHautFlecheWin) {
        this.oHtmlAscHautFlecheWin.className = this.oHtmlAscHautFlecheWin.className.replace(/ etroitFleche/g,'');
    }
    if (this.optionAscBasFlecheWin) {
        this.oHtmlAscBasFlecheWin.className = this.oHtmlAscBasFlecheWin.className.replace(/ etroitFleche/g,'');
    }
  }

  this.majListeModalites();
}

ContainerAutoScroll.prototype.basculeModalite = function (mode) {
//=============================================================
var opt = 'this.opt["Mod"].'+mode;
if (eval(opt))
  this.fixeModalitesParticulieres(mode+'=false');

else 
  this.fixeModalitesParticulieres(mode+'=true');
}


ContainerAutoScroll.prototype.existModePreDef = function (mode){
//===========================================
// test l existence du mode de pr?sentation / liste des modes pr?d?finis
  var tokElt = mode + '#';
  if (ContainerAutoScroll.prototype.listeModePreDef.indexOf(tokElt) ==  -1) {
      alert('\"'+mode+'\"'+' est une d?nomination d\' aspect de scroll inconnue; le mode d\' affichage ainsi d?sign? ne peut donc ?tre pris en compte.');
       return false;
  }
  else
       return true;
}

ContainerAutoScroll.prototype.initOptionsModePreDef = function (mode) {
//=================================================
// positionne les attributs d option d aspect du scroll (.option<elts visuels>)
// en fonction du mode pr?d?fini (mode) sp?cifi?
traceExec('initOptionsModePredef entree mode= '+mode,31);
  if (   mode 
      && !this.existModePreDef(mode)) return;

  
  var elts;
  //---------------- elements ? afficher --------------------
  if (mode) {
    var elements = ContainerAutoScroll.prototype.modePreDefEltsPresents[mode];
    if (!(elements instanceof Array)){
     elts  = new Array();
     elts[0] = elements;
    }
    else
     elts = elements;
  }
  // a partir de la liste d'elts presents
  else {
     elts  = new Array();
     elts = this.listeEltsPresents.split("#");
     elts.pop();
  }
  
  var instr;
  for (var i=0; i< elts.length; i++) {
    instr = 'this.option' + elts[i] + ' = true';
    eval(instr);
  }
  
  //----------------- elements ? masquer --------------------
  if (mode) {
     elements = ContainerAutoScroll.prototype.modePreDefEltsAbsents[mode];
     if (elements != ''){
       if (!(elements instanceof Array)){
         elts  = new Array();
         elts[0] = elements;
       }
       else
         elts = elements;
     }
  } 
  else {
     elts  = new Array();
     elts = this.listeEltsAbsents.split("#");
     elts.pop();
  }

       // elements ? supprimer
       var instr;
       for (var i=0; i< elts.length; i++) {
          instr = 'this.option' + elts[i] + ' = false';
          eval(instr);
       }
  //----------------- comportements sp?ciaux de certains elts ---------
  if (mode) {
     elements = ContainerAutoScroll.prototype.modePreDefComportements[mode];
     if (elements != ''){
        if (!(elements instanceof Array)){
         elts  = new Array();
         elts[0] = elements;
        }
        else
         elts = elements;
      }
   }
  else {
         elts  = new Array();
         elts = this.listeModalites.split("#");
         elts.pop();
  }  
  
  
      // modalit?s / certains elts
      var instr;
      for (var i=0; i< elts.length; i++) {
          instr = 'this.opt["Mod"].' + elts[i];
          traceExec('instr= '+instr,31);
          eval(instr);
      }
      
      // a revoir pb option texte / booleennes
      this.opt.Mod.PosAscWin = this.opt.Mod.PosAscWinLeft  ? 'left' : 'right';
      this.opt.Mod.PosAsc    = this.opt.Mod.PosAscLeft     ? 'left' : 'right';
}
ContainerAutoScroll.prototype.isEmpty  = function (){
//==================================
  return !this.oHtmlTexte.firstChild;
}


ContainerAutoScroll.prototype.createBuff  = function (bForcecreation){
//========================================
// retourne le  buffer courant si la cr?ation n'est pas exig?e et si le buffer courant est vide
if (    (!bForcecreation)
    &&  (this.lBuff.length > 0)
    &&  (!this.oHtmlTexte.firstChild)) {
//    alert('createBuff utilisation du buffer courant pr?existant et vide');
    return this.noCurrentBuff;
}    

//this.lBuff.push(new Object);
traceExec('createBuff entree this.lBuff.length = '+this.lBuff.length+' this.noCurrentBuff= '+this.noCurrentBuff,77);
this.lBuff.push({doct:null, descr:''});

//this.lBuff[this.lBuff.length] = null;  // a tester
traceExec('createBuff ajout this.lBuff.length = '+this.lBuff.length+' n? buff= '+(this.lBuff.length-1),77);
//alert('createBuffer  Buffer n? = '+(this.lBuff.length-1));
return (this.lBuff.length-1);
}

ContainerAutoScroll.prototype.fillAndDisplayBuff  = function (noB,doct,bClone,descrDoct,refDoct){
//==============================================
// affichage du buffer noB constitu? du document doct
// n? d'identif du buffer incorrect
traceExec('fillAndDisplayBuff this.noCurrentBuff= '+this.noCurrentBuff,77);  

if (noB >= this.lBuff.length) {
//    alert('buffer n? '+noB+ ' inexistant');
    return;
}
// buffer courant ? svgder
if (noB != this.noCurrentBuff) {
//    this.saveCurrentBuffer(effact=true);
    this.saveCurrentBuffer(effact=false);
    this.noCurrentBuff = noB;
    
    traceExec('fillAndDisplayBuff ap saveC... reaff de this.noCurrentBuff= '+this.noCurrentBuff,77);  
}
// descriptif du doct 
this.lBuff[this.noCurrentBuff].descr = descrDoct;
this.lBuff[this.noCurrentBuff].refExt = refDoct;
this.lBuff[this.noCurrentBuff].bClone = bClone;
// document ? charger -> chargt
if (doct) // modif pour print
  //this.lBuff[this.noCurrentBuff].doct = 
  this.containerHtml.oContainer.fill(doct,save=false,bClone);
  
traceExec('fillAndDisplayBuff this.noCurrentBuff= '+this.noCurrentBuff,77);  
}

ContainerAutoScroll.prototype.getDescrDoct  = function (){  
//======================================
return this.lBuff[this.noCurrentBuff].descr;
}

ContainerAutoScroll.prototype.refExtCurrentBuff  = function (){  
//======================================
traceExec('this.lBuff[this.noCurrentBuff].refExt = '+this.lBuff[this.noCurrentBuff].refExt+
' this.noCurrentBuffer= '+this.noCurrentBuff,77);
  return this.lBuff[this.noCurrentBuff].refExt;
}

ContainerAutoScroll.prototype.isCurrentBuffRefExt  = function (){  
//===============================================
  return (this.lBuff[this.noCurrentBuff].refExt != null);
}

ContainerAutoScroll.prototype.bCloneCurrentBuff  = function (){  
//======================================
traceExec('this.lBuff[this.noCurrentBuff].bClone = '+this.lBuff[this.noCurrentBuff].bClone+
' this.noCurrentBuffer= '+this.noCurrentBuff,77);
  return this.lBuff[this.noCurrentBuff].bClone;
}

ContainerAutoScroll.prototype.saveCurrentBuffer  = function (bClear){  //,noBuff){
//======================================
// svgde du doct courant dans un buffer de n? noBuff s'il est sp?cifi? 
traceExec('saveCurrentBuffer',31);
// rien ? sauvegarder
if (this.isEmpty()) return;

//var nBuff = (noBuff == null) ? 0 : noBuff;

// cr?ation s'il y a lieu de la zone de svgde des buffers Html
if (!this.oHtmlSvgBuff) {
   // tableau de ref des buffers
//   this.lBuff = new Array; fait ds le constructeur
   
   // zone de stockage des div Html correspdts aux buffers
   this.oHtmlSvgBuff = document.createElement('DIV');
   this.oHtmlSvgBuff.id = this.idObjComp + '_svgBuff';
   this.oHtmlSvgBuff.style.display = 'none';
   this.containerHtml.appendChild(this.oHtmlSvgBuff);
}

// si buffer modifi? / svgde
if (this.bBuffMod){
  // deja svgd? -> suppression ancienne svgde
//  if (this.lBuff.at(this.noCurrentBuff))
  traceExec('saveCurrentBuff  test de lBuff[this.noCurrentBuff].doct avec noCurrentBuff= '+this.noCurrentBuff,77);
  traceExec('saveCurrentBuff this.lBuff.length = '+this.lBuff.length,77);
  //alert('savecuurentbuffer this.noCurrentBuff= '+this.noCurrentBuff);
  if (this.lBuff[this.noCurrentBuff].doct)  // a revoir createBuff initialise avec 1 Object !
    this.oHtmlSvgBuff.removeChild(this.lBuff[this.noCurrentBuff].doct);   // supp ancien buff

  // cr?ation par copie du contenu Html courant du container
  var nvBuff = this.oHtmlTexte.cloneNode(true);                           
  nvBuff.id = this.idObjComp + '_buff_' + this.noCurrentBuff;

  // inscription ds la zone de masquage des buffers
  this.oHtmlSvgBuff.appendChild(nvBuff);                                 

  // r?f?rence ds la liste des buffers
//  this.lBuff.val(this.noCurrentBuff, nvBuff);
  traceExec('saveCurrentBuff  svg ds lBuff[this.noCurrentBuff] noCurrentBuff= '+this.noCurrentBuff,77);
  this.lBuff[this.noCurrentBuff].doct = nvBuff;
}   
this.lBuff[this.noCurrentBuff].propAff = this.cursTexte ? this.cursTexte.prop:0;
//alert('svde prop aff = '+this.cursTexte.prop+' svg= '+this.lBuff[this.noCurrentBuff].propAff);

if (bClear)
    this.clear();
}

ContainerAutoScroll.prototype.nextBuff = function (){  
//====================================
// affichage du buffer suivant dans la liste lBuff et de son contenu
traceExec('nextBuff',31);
var noB = this.noCurrentBuff + 1;
// fin de liste de buff atteinte
if (noB >= this.lBuff.length) {
    window.status = 'dernier buffer (n?'+ this.noCurrentBuff + ') de la liste atteint';
    return;
}

this.restoreBuffer(noB,save=true);
/*
// buffer courant jamais svgder -> svgde
//if (!this.lBuff[this.noCurrentBuff].doct)
    this.saveCurrentBuffer(effact=true);
    
// descriptif du doct 
//this.lBuff[this.noCurrentBuff].descr = descrDoct;

// chargt doct
this.containerHtml.oContainer.fill(this.lBuff[noB].doct,save=false,bClone=true);
// pointeur buff courant
this.noCurrentBuff = noB;
*/
}

ContainerAutoScroll.prototype.prevBuff = function (){  
//====================================
// affichage du buffer suivant dans la liste lBuff et de son contenu
traceExec('prevBuff',31);

var noB = this.noCurrentBuff - 1;
// fin de liste de buff atteinte
if (noB < 0) {
    window.status = 'premier buffer de la liste atteint';
    return;
}

this.restoreBuffer(noB,save=true);
/*
// buffer courant jamais svgder -> svgde
//if (!this.lBuff[this.noCurrentBuff].doct){
   traceExec('prevBuff svgde du buff courant n? '+this.noCurrentBuff,77);
   this.saveCurrentBuffer(effact=true);
//}    
    
// descriptif du doct 
//this.lBuff[this.noCurrentBuff].descr = descrDoct;

// chargt doct
this.containerHtml.oContainer.fill(this.lBuff[noB].doct,save=false,bClone=true);
// pointeur buff courant
this.noCurrentBuff = noB;
*/
}


ContainerAutoScroll.prototype.restoreBuffer  = function (noB,bSave){
//=========================================
// svgde eventuelle du buffer courant + clear
traceExec('restoreBuffer',31);
if (      (noB < 0)
     ||   (noB >= this.lBuff.length) )  {
     alert('restauration de buffer impossible : n? de buffer erronn?');
     return;
}

if (bSave)
    this.saveCurrentBuffer(false);

this.clear(bConserveELtsScroll = true);
/*
this.videBuff();
// r?alis? par reaffInterfaceScroll si besoin : this.suppEltsScroll();
this.initBuff();
*/
// pointeur buff courant
this.noCurrentBuff = noB;

var height = this.lBuff[noB].doct.style.height;
var nvBuff = this.lBuff[noB].doct.cloneNode(true);                           
// deplact des elts du buff
while (nvBuff.firstChild) {
    this.oHtmlTexte.appendChild(nvBuff.firstChild);
}
this.oHtmlTexte.id = this.idObjComp + '_buffActif_' + this.noCurrentBuff;
this.oHtmlTexte.style.height = height;

if (this.bAffInterfaceScroll) 
   this.reaffInterfaceScroll(bBottom=false);
//alert('restitution de la prop affich?e : '+this.lBuff[noB].propAff);
this.cursTexte.fixeProp(this.lBuff[noB].propAff);
/*
//  nvBuff.id = this.idObjComp + '_buff_' + this.noCurrentBuff;
// a revoir ne semble pas fctionner / scroll
this.oHtmlTexte.parentNode.replaceChild(nvBuff,this.oHtmlTexte);
this.oHtmlTexte = nvBuff;
this.oHtmlTexte.id = this.idObjComp + '_buffActif_' + this.noCurrentBuff;
if (this.bAffInterfaceScroll) 
   this.reaffInterfaceScroll(bBottom);
*/
/*
// recup refs sur buff
var id = this.idObjComp + '_buff_' + '1';
var svgBuff = this.oHtmlSvgBuff.getElementById(id)
var height = svgBuff.style.height;
// deplact des elts du buff
while (this.oHtmlSvgBuff.firstChild) {
    this.oHtmlTexte.appendChild(this.oHtmlSvgBuff.firstChild);
}
this.oHtmlTexte.style.height = height;
if (this.bAffInterfaceScroll) 
   this.reaffInterfaceScroll(bBottom);
*/
this.bBuffMod = false;  //reinitialisation du decompte des modifs apres chargt depuis svgde
}
/*
ContainerAutoScroll.prototype.removeBuffer  = function (){
//========================================
}
*/
ContainerAutoScroll.prototype.clear  = function (bConserveEltsScroll){
//==================================
traceExec('clear',31);
//alert('effacement texte');
this.videBuff();         // efface texte

if (!bConserveEltsScroll)
    this.suppEltsScroll();   // supp elts interface scroll

this.initBuff();         // init dimension texte
}

ContainerAutoScroll.prototype.videBuff  = function (){
//====================================
traceExec('videBuff',31);
while (!this.isEmpty()) {
    this.oHtmlTexte.removeChild(this.oHtmlTexte.firstChild);
}
}

ContainerAutoScroll.prototype.suppEltsScroll  = function (){
//==========================================
traceExec('suppEltsScroll',31);
if (this.partieDoctCachee) {
    this.passBascule = true;
    this.suppToutScroll();
    this.passBascule = false;
    this.partieDoctCachee = false;
}

}
ContainerAutoScroll.prototype.initBuff  = function (){
//====================================
traceExec('initBuff',31);
//alert('clear avant init oHtmlTexte.height height= '+this.oHtmlTexte.style.height);
//this.oHtmlTexte.style.height = 0;
this.oHtmlTexte.style.height = 'auto';
this.oHtmlTexte.style.top = 0;
this.oHtmlTexte.style.left = 0;
this.bBuffMod  = true;
//this.noCurrentBuff = this.lBuff.length();
}

ContainerAutoScroll.prototype.add  = function (oHtmlElt,bClone){
//===============================

//alert("entree add "+oHtmlElt+' bClone= '+bClone+' this.optionCloneContenuAjoute= '+this.optionCloneContenuAjoute);
traceExec('add  this.bAffInterfaceScroll= '+this.bAffInterfaceScroll,31); 
  var bBottom = this.bDisplBottomText();
  
    if (    this.optionCloneContenuAjoute
        ||  bClone)
        this.oHtmlTexte.appendChild(oHtmlElt.cloneNode(true));
    else
        this.oHtmlTexte.appendChild(oHtmlElt);   

//    this.oHtmlTexte.appendChild(oHtmlElt);
//alert( "apres appendChild");   
    // ajout d'une div en position absolue ou relative
    // force si n?cessaire l'aggrandissement de la div container oHtmlTexte de fa?on ? englober cette nvlle div
    if (oHtmlElt.nodeType == 1) {
        var typePosition = getComputStyleStr(oHtmlElt,'position');
        if (   ( typePosition == 'relative')
            || ( typePosition == 'absolute')) {
          if (   this.oHtmlTexte.offsetHeight
               < (parseInt(oHtmlElt.style.top) + parseInt(oHtmlElt.style.height)) ) {
             this.oHtmlTexte.style.height = parseInt(oHtmlElt.style.top) + parseInt(oHtmlElt.style.height) - 1;
          }
       }
    }
//    alert('fin de add');
// mise ? jour de l'interface 
//(seult si affInterfaceScroll a deja ete execut?e:
//  en effet cette m?thode add est employ?e dans le constructeur de ContainerAutoScroll
//  ?ventuellement avant l'ex?cution de affInterfaceScroll qui est asynchrone)

/*if (this.bAffInterfaceScrollEnCours){
 a revoir ne fctionne pas
   this.execAsynch = execAfter;
   this.execAsynch(this.bAffInterfaceScrollEnCours,false,'reaffInterfaceScroll');
}    

else    
*/
traceExec('this.bAffInterfaceScrollEnCours = '+this.bAffInterfaceScrollEnCours,31);

//while (this.bAffInterfaceScrollEnCours){
//    wait();
//}

if (this.bAffInterfaceScroll) 
   this.reaffInterfaceScroll(bBottom);

this.bBuffMod  = true;
}

ContainerAutoScroll.prototype.reaffInterfaceScroll = function (bBottom,bTop, heightRef, heightTexte) {
//================================================
    // reconsideration des elts de scrolling en fct nvlle taille
    // hauteur dispo

if (heightTexte == null) traceExec("reaffInterfaceScroll 2eieme argt null",31);
if (heightTexte) traceExec("reaffInterfaceScroll 2eieme argt",31);
if (!heightTexte) traceExec("reaffInterfaceScroll ! 2eieme argt",31);
if (heightTexte == undefined) traceExec("reaffInterfaceScroll 2eieme argt undefined",31);
/*
traceExec('== reaffInterfaceScroll '
         + ' heightRef= '+heightRef
         + ' ou this.containerHtml.style.height= '+this.containerHtml.style.height
         +' heightTexte= '+heightTexte
         + ' ou this.oHtmlTexte.offsetHeight= '+this.oHtmlTexte.offsetHeight,1);    
*/
  var height =   (heightRef != null) ? heightRef : parseInt(this.containerHtml.style.height);
  var heightTxt =  (heightTexte != null) ? heightTexte : this.oHtmlTexte.offsetHeight;
//traceExec('reaffInterfaceScroll '
//         + ' height= '+height+' heightTxt= '+heightTxt,1);    


// alors que le document ?tait complemtement visible une portion devient masqu?e:
  // r?affichage des elts de scrolling
//  alert('reaff containerHtml.height= '+height+' oHtmlTexte= '+parseInt(this.oHtmlTexte.style.height)
//  +' offsetHeight= '+  parseInt(this.oHtmlTexte.offsetHeight));
  if (     (height < parseInt(heightTxt)) 
//if (     (height < parseInt(this.oHtmlTexte.style.height)) 
      &&   (!this.partieDoctCachee)) {
//alert('document n est plus affichable');
traceExec('reaffInterfaceScroll height container < --> reactiveScroll',31);
    this.partieDoctCachee = true;
    this.passBascule = true;
    this.reactiveScroll();
    this.passBascule = false;
  }
//else
//alert('pas de chgt de visibilit?');
  // doct pr?c?dent partiellement masqu? (= elts interf scroll visibles)
  // doct pr?sent de taille inf?rieure compl?tement visible

  else
//  if (     (height >= parseInt(this.oHtmlTexte.offsetHeight)) 
  if (     (height >= parseInt(heightTxt)) 
      &&   (this.partieDoctCachee))  {
traceExec('reaffInterfaceScroll height container > --> suppELtsScroll',31);
    this.suppEltsScroll();
    this.oHtmlTexte.style.top = 0;
  }
 

  //---- (re)calcule la taille du cadre interne, en fonction des elts de scroll presents
//  this.computeDims(height);
  if (!document.getElementById(this.containerHtml.id))
    execAfterLoad(this.containerHtml.id,'computeDims');       // a revoir uniformiser avec execAfterLoad (cf. ds global.js)
  else
    this.computeDims(height);

  // racourcissement du cadreInt
  if (bBottom) 
      this.oHtmlTexte.style.top = Math.min(0 ,
                                    (   -1 * parseInt(this.oHtmlTexte.style.height)
                                     +  parseInt(this.oHtmlCadreInt.style.height)));
  if (this.cursTexte) {
      this.cursTexte.loadLimitsDyn();
      this.cursTexte.synchro();
  }
}

ContainerAutoScroll.prototype.methodesPubliques = function (){
//=============================================
// meta// a revoir ; a realiser dynamiquement
  return
"new (oHtmlTexte, width, height)"
//--- dimensions du container
+"modDim (dWidth,dHeight)"
+"setDim (width,height)"
//--- placement du container
+"placeIn (oHtmlParent, top, left)"
+"moveTo (top,left)"
+"shift (deltaTop,deltaLeft)"
//--- inclusion d elements
+"add (oHtmlElt)"
//--- deplacement du texte
+"moveTopText ()"
+"moveBottomText ()"
+"posLine (noLine)"
//--- mise en mouvement du scroll
+"scrollLineText  (sens, nbLine)"
+"scrollTextDown (nbLine,vitesse,sansEntretien)"
+"scrollTextUp (nbLine,vitesse,sansEntretien)"
+"scrollText  (sens, nbLine, vitesse,id, sansEntretienMvt)"
//--- d?finition de l'interface de d?filement
+"autoScroll  (mode)"

+"basculeScroll (elements,dejaEnreg,ssReDim)"
+"fixeEltScroll (elements,mode,ssReDim)"
+"positionAscenseur (position)"

+"basculeModalite (mode) "
+"fixeModalitesParticulieres (elements)"
+"autoScrollSurTexte (suppression)"
+"couplageAvecCursExt(coupleur) "
+"zoneAscModeInteractif (interactif)"
+"zoneTemoinScrollAuto (auto)"
+"zoneAffModeInteractif (interactif)"
+"barreTemoinPos(etroite)"
;
}

ContainerAutoScroll.prototype.affInterfaceScroll = function (){
//==============================================
this.bAffInterfaceScrollEnCours = true;
//traceExec('affInterf this.oHtmlTexte.offsetHeight = '+this.oHtmlTexte.offsetHeight ,1);
//alert('affInterfaceScroll');
traceExec('**************************************',31);
traceExec('**************************************',31);
traceExec('**************************************',31);
traceExec('**************************************',31);
traceExec('affInterf this.oHtmlCadreInt.style.height = '+parseInt(this.oHtmlCadreInt.style.height) ,9);
//traceExec('affInterf containerHtml -barreAction = '+(    pixHeight(this.containerHtml,true)
//           -   getComputStyleIf(this.oHtmlBarreAction,'height')),1);
//traceExec('pixHeight(this.oHtmlTexte,true)= '+pixHeight(this.oHtmlTexte,true),1);
//traceExec('this.oHtmlTexte.className = '+this.oHtmlTexte.className+' this.oHtmlTexte.id= '+this.oHtmlTexte.id,1);
//traceExec('this.oHtmlTexte.style.height= '+this.oHtmlTexte.style.heigth,1);
	if   (    this.oHtmlTexte.offsetHeight 
       >  (    pixHeight(this.containerHtml,true)
           -   getComputStyleIf(this.oHtmlBarreAction,'height'))) {
												//parseInt(this.oHtmlCadreInt.style.height)) {
//traceExec('.affInterfaceScroll  ok',1);
   // application des options de pr?sence d elts d interface dedi?s au scroll
   this.passBascule = true;
   this.partieDoctCachee = true;
   this.fixeEltScroll(null,null,true);  
												//   this.fixeEltScroll();  
   // application des options de modalit?s particuli?res de focntionnement de certains elts de l interface
   this.fixeModalitesParticulieres();
   
   this.computeDims();
   this.passBascule = false;
}
else {
//traceExec('.affInterfaceScroll --> this.svgParamScroll();',1);
   this.svgParamScroll();

   this.partieDoctCachee = false;
}   

this.zoneTexteCommeCurseur();

// temoin de la mise en place de l'interface cf. .add
this.bAffInterfaceScroll = true;
this.bAffInterfaceScrollEnCours = false;

traceExec('affInterf this.bAffInterfaceScroll = '+this.bAffInterfaceScroll ,31);
//alert('fin affinterf');
}

ContainerAutoScroll.prototype.appliOptScroll = function () {
//========================================
//inutilis?e
// application des options de pr?sence d elts d interface dedi?s au scroll
   this.fixeEltScroll();  
   // application des options de modalit?s particuli?res de focntionnement de certains elts de l interface
   this.fixeModalitesParticulieres();
}

ContainerAutoScroll.prototype.computeDims = function (heightRef,widthRef) {
//========================================
// private
// Calcul les dimensions des ?l?ments internes cadre interne ascenseurs fleches ... etc
// en fonction des dimensions du cadre externe
// Mets ?galement ? jour les limites du curseur mobile cursText associ? au deplacement du texte
// Appell?e par setDim et modDim qui re?oivent les dimensions externes du container AutoScroll

// heightRef et widthRef optionnels : pour corriger pb IE retr?cissement div interne avant div externe
// cf. appel depuis modDim
//traceExec("computeDims entree heightRef= "+heightRef+' widthRef= '+widthRef,1);

traceExec("computeDims ext= pixHeight(this.containerHtml)"+pixHeight(this.containerHtml,true),31);
traceExec("computeDims - act=getComputStyle(this.oHtmlBarreAction,'height')= "+getComputStyleIf(this.oHtmlBarreAction,'height'),31);
//traceExec("computeHeightCadreInt - haut=getComputStyle(this.oHtmlAccesHaut,'height')= "+getComputStyleIf(this.oHtmlAccesHaut,'height'),20);
//traceExec("computeHeightCadreInt - bas=getComputStyle(this.oHtmlAccesBas,'height')= "+getComputStyleIf(this.oHtmlAccesBas,'height'),20);

traceExec('computeDims av this.oHtmlCadreInt.style.height= '+this.oHtmlCadreInt.style.height,31);
this.oHtmlCadreInt.style.height =  Math.max(1,
//                                           pixHeight(this.containerHtml,'WinMoz')
                                           (heightRef || pixHeight(this.containerHtml,true))
                                         - getComputStyleIf(this.oHtmlBarreAction,'height')
                                         - getComputStyleIf(this.oHtmlAccesHaut,'height')
                                         - getComputStyleIf(this.oHtmlAccesBas,'height')
                                         );
traceExec('computeDims ap this.oHtmlCadreInt.style.height= '+this.oHtmlCadreInt.style.height,31);
  
                                        
traceExec('computeDims av this.oHtmlCadreInt.style.width = '+this.oHtmlCadreInt.style.width ,31);

// pour test 
//if (window.getComputedStyle != undefined)
// rialto : class Name of oHtmlCadreInt is 'zoneTexte' with width = "100%"
// and it's possible that this.containerHtml.offsetWidth = 0  when the context
// is not yet display in document --> oHtmlCadreInt.style.width = 1 !!!!
    this.oHtmlCadreInt.style.width =  Math.max(1,  // a revoir
								// reactiv? pour rialto car pb avec 
								// Box in Tabs with contenuOnglet.display = 'none'
								// ? v?rifier / autres contextes
                                           (widthRef || pixWidth(this.containerHtml,true))
// avant rialto:                                          this.containerHtml.offsetWidth
                                         );

traceExec('computeDims ap FFox this.oHtmlCadreInt.style.width = '+this.oHtmlCadreInt.style.width ,31);

/*
if (heightRef){ 
   this.containerHtml.style.height = heightRef;
}
*/
// mise ? jour des limites de d?placement du texte-curseur utilis?es dans cursText.calculProp
traceExec("computeDims entree appel de loadLimitsDyn",76);
//mise en com pour test ? ce stade si heighref pb 
//  if (this.cursTexte)
//    this.cursTexte.loadLimitsDyn();


//    this.cursTexte.loadLimitsDyn(heightRef,widthRef);
        //this.oCiu['DragAndDrop'].loadLimitsDyn(this.oCiu['DragAndDrop'].specs.objetADeplacer.parentNode);

// d?plac? + bas mise ? jour des limites de d?placement du t?moin de position-curseur 
//utilis?es dans cursTemoinPos.placeCurs,calculProp
/*if (this.optionAscenseurWin){
//traceExec('heightRef= '+heightRef,3);
    this.cursTemoinPos.loadLimitsDyn();
//    this.cursTemoinPos.loadLimitsDyn(heightRef,widthRef);
}
*/

//if (this.oHtmlPiloteScroll) {
if (this.oHtmlAscenseurWin ||this.oHtmlAscenseur) {
//  this.oHtmlTexte.style.width = pixWidth(this.oHtmlCadreInt,'width')  - 20;

//pour test  if (window.getComputedStyle != undefined) {
   traceExec('computeDims FFox this.oHtmlTexte.style.width = '+this.oHtmlTexte.style.width ,31);
   traceExec('computeDims FFox this.oHtmlCadreInt.offsetWidth = '+this.oHtmlCadreInt.offsetWidth ,31);
/*
alert('this.oHtmlCadreInt.offsetWidth');
alert('this.oHtmlCadreInt.offsetWidth= '+this.oHtmlCadreInt.offsetWidth
    +' this.optionAscenseur= '+this.optionAscenseur
    +' this.optionAscenseurWin= '+this.optionAscenseurWin
    +' parseInt(this.valCssLarge)= '+parseInt(this.valCssLarge)
    +' this.opt["Mod"].AscWinFin= '+this.opt['Mod'].AscWinFin
    +' parseInt(this.valCssEtroit)= '+parseInt(this.valCssEtroit)
    +' parseInt(this.valCssLarge)= '+parseInt(this.valCssLarge)
      );

var x =   this.oHtmlCadreInt.offsetWidth // this.oHtmlCadreInt.style.width // 
                                  - (  9 
                                     + (this.optionAscenseur    ? parseInt(this.valCssLarge)  : 0)
                                     + (this.optionAscenseurWin ? (this.opt['Mod'].AscWinFin ? parseInt(this.valCssEtroit) 
                                                                                          : parseInt(this.valCssLarge))  
                                                             : 0)

                                     + 9
                                    );
alert('x= '+x);
*/
   this.oHtmlTexte.style.width =    this.oHtmlCadreInt.offsetWidth // this.oHtmlCadreInt.style.width // 
                                  - (  9 
                                     + (this.optionAscenseur    ? parseInt(this.valCssLarge)  : 0)
                                     + (this.optionAscenseurWin ? (this.opt['Mod'].AscWinFin ? parseInt(this.valCssEtroit) 
                                                                                          : parseInt(this.valCssLarge))  
                                                             : 0)

                                     + 9
                                    ); // (width TD gche + widh ascensceur + width TD droite);

   traceExec('computeDims ap this.oHtmlTexte.style.width = '+this.oHtmlTexte.style.width ,31);

 //}
 
/*   this.oHtmlTexte.style.width = this.oHtmlCadreInt.offsetWidth    
     - (  9 
        + (this.opt['Mod'].AscWinFin ? this.valCssEtroit : this.valCssLarge)
        + 9); // (width TD gche + widh ascensceur + width TD droite);
*/
//   this.oHtmlTexte.style.width = this.oHtmlCadreInt.offsetWidth    - (  9 + 32 + 9); // (width TD gche + widh ascensceur + width TD droite);
//   this.oHtmlTexte.style.width = this.oHtmlCadreInt.offsetWidth    - (  9 + 5 + 9); // (width TD gche + widh ascensceur + width TD droite);
//   this.oHtmlTexte.style.width = this.oHtmlCadreInt.offsetWidth    -  5 ; // (width TD gche + widh ascensceur + width TD droite);
/*pour test : sinon pb lorsque texte ins?cable 
else
 //possible aussi :
// this.oHtmlTexte.style.width = this.oHtmlCadreInt.offsetWidth    -20  ; //? - (  9 + 17 + 9) + 15;
  // (width TD gche + widh ascensceur + width TD droite + padding);

  //this.oHtmlTexte.style.width = this.oHtmlCadreInt.offsetWidth    - (  9 + 17 + 9);
  this.oHtmlTexte.style.width = "100%";
  */
}

if (this.oHtmlPiloteScroll) {
     this.oHtmlPiloteScroll.style.height =  parseInt(this.oHtmlCadreInt.style.height); // math.max ??
     if  (!this.optionAccesHaut) {
//alert('avant this.oHtmlPiloteScroll.style.height= '+this.oHtmlPiloteScroll.style.height);
            this.oHtmlPiloteScroll.style.height =   parseInt( this.oHtmlPiloteScroll.style.height)
                                                  - getComputStyleIf(this.oHtmlAscHautFleche,'height');
//alert('apres');
     }
     if  (!this.optionAccesBas)
        this.oHtmlPiloteScroll.style.height =   parseInt( this.oHtmlPiloteScroll.style.height)
                                              - getComputStyleIf(this.oHtmlAscBasFleche,'height');

    var excedent =    parseInt(this.oHtmlPiloteScroll.style.height)
                    - ContainerAutoScroll.prototype.heightMaxAsc;
    if ( excedent > 0){
       //----- zone interm?diare si lg ascenceur > hauteur image max
       this.oHtmlAscCentre = document.createElement('DIV');
       this.oHtmlAscCentre.oCiu = this;
       this.oHtmlAscCentre.className = 'ascenseurCentre';
       this.oHtmlPiloteScroll.insertBefore(this.oHtmlAscCentre,this.oHtmlAscInf);

       this.oHtmlAscCentre.style.height = excedent;
       this.oHtmlAscSup.style.height = this.oHtmlAscInf.style.height =  ContainerAutoScroll.prototype.heightMaxAsc / 2;
    }
    else  {
       if (getComputStyleStr(this.oHtmlAscSup,'height') != '50%') {
          this.oHtmlAscSup.style.height = this.oHtmlAscInf.style.height =  '50%';
          if (this.oHtmlAscCentre)
             this.oHtmlAscCentre.parentNode.removeChild(this.oHtmlAscCentre);
       }
    }
}
if (this.oHtmlPiloteScrollWin) {
     this.oHtmlPiloteScrollWin.style.height =  parseInt(this.oHtmlCadreInt.style.height); // math.max ??
//     if  (!this.optionAccesHaut) {
            this.oHtmlPiloteScrollWin.style.height =   parseInt( this.oHtmlPiloteScrollWin.style.height)
                                                  - getComputStyleIf(this.oHtmlAscHautFlecheWin,'height');
//     }
//     if  (!this.optionAccesBas)
        this.oHtmlPiloteScrollWin.style.height =   parseInt( this.oHtmlPiloteScrollWin.style.height)
                                              - getComputStyleIf(this.oHtmlAscBasFlecheWin,'height');
}

// fixe la taille du texte pour eviter les pb avec IE li? au retrecissement d une fenetre
// qui empeche d utiliser correctement offsetHeight ...
this.oHtmlTexte.style.height = this.oHtmlTexte.offsetHeight;
// mise ? jour des limites de d?placement du t?moin de position-curseur utilis?es dans cursTemoinPos.placeCurs,calculProp
if (this.optionAscenseurWin){
//traceExec('avant app cursTemoinPos.loadLimitsDyn   heightRef= '+heightRef,3);
    // chargt des nvlles limites fct hauteur de oHtmlPiloteScroll
//    this.cursTemoinPos.loadLimitsDyn(heightRef,widthRef);
    this.cursTemoinPos.loadLimitsDyn();
    // modification de la hauteur du curseur fct hauteur cadreInt / hauteur texte
    var lgTexteApparent = Math.min  (
                                        parseInt(this.oHtmlCadreInt.style.height),
                                        (  parseInt(this.oHtmlTexte.offsetHeight)
                                         - Math.abs(parseInt(this.oHtmlTexte.style.top)))
                                    )
    this.cursTemoinPos.oHtmlMobile.style.height = Math.min ( 
                                                         parseInt(this.oHtmlPiloteScrollWin.style.height)
                                                       , (  (  
//                                                             parseInt(this.oHtmlCadreInt.style.height)
                                                            lgTexteApparent
                                                            / parseInt(this.oHtmlTexte.offsetHeight))
                                                          * parseInt(this.oHtmlPiloteScrollWin.style.height)
                                                          ));
    this.cursTemoinPos.oHtmlMobile.style.height = Math.max(  ContainerAutoScroll.prototype.heightMinCursTemoinPos
                                                            ,parseInt(this.cursTemoinPos.oHtmlMobile.style.height));
                                                           
}
traceExec("computeHeightCadreInt this.oHtmlCadreInt.style.height = "+this.oHtmlCadreInt.style.height,20);
traceExec("computeHeightCadreInt sortie",20);
}

ContainerAutoScroll.prototype.heightMaxAsc = 2 * 288;
//========================================

ContainerAutoScroll.prototype.placeIn = function (oHtmlParent,top,left){
//===================================
// public
// place l' objet Html ContainerAutoScroll dans la page, dans un objet Html parent, en position absolute
//   oHtml (i): objet Html
//   top   (i): ordonn?e / coin sup gche (pourcentage autoris?)
//   left  (i): abscisse / coin sup gche (pourcentage autoris?)

this.containerHtml.style.top = top;
this.containerHtml.style.left = left;
oHtmlParent.appendChild(this.containerHtml);

// (re)calcule la taille du cadre interne
//this.computeHeightCadreInt();
traceExec('appel depuis placeIn de exec',31);
//execAfterLoad_2(this.containerHtml.id,'computeHeightCadreInt');       // a revoir uniformiser avec execAfterLoad (cf. ds global.js)
//execAfterLoad(this.containerHtml.id,'computeHeightDims');       // a revoir uniformiser avec execAfterLoad (cf. ds global.js)

//pour test ci-dessous  execAfterLoad(this.containerHtml.id,'computeDims');       // a revoir uniformiser avec execAfterLoad (cf. ds global.js)
//pour test ci-dessous execAfterLoad(this.containerHtml.id,'reaffInterfaceScroll');       // a revoir uniformiser avec execAfterLoad (cf. ds global.js)
execAfterLoad(this.containerHtml.id,'setDimAsynch');       // a revoir uniformiser avec execAfterLoad (cf. ds global.js)
// alternative possible si pas de zones acces directe    this.oHtmlCadreInt.style.height = '100%'
}

ContainerAutoScroll.prototype.moveTo = function (top,left){
//==================================
// public
// place l' objet Html ContainerAutoScroll au sein de l objet Html parent, en position absolute
//   top   (i): ordonn?e / coin sup gche (pourcentage autoris?)
//   left  (i): abscisse / coin sup gche (pourcentage autoris?)

this.containerHtml.style.top = top;
this.containerHtml.style.left = left;
}

ContainerAutoScroll.prototype.shift = function (deltaTop,deltaLeft){
//==================================
// public
// deplace l' objet Html ContainerAutoScroll au sein de l objet Html parent relativement ? sa position actuelle
//   deltaTop   (i): translation /ordonn?e (en pourcentage si base en pourcentage)
//   deltaLeft  (i): translation /abscisse (en pourcentage si base en pourcentage)

traceExec('shift top= '+this.containerHtml.style.top,20);
traceExec('shift left= '+this.containerHtml.style.left,20);
if (this.containerHtml.style.top.indexOf('%') != -1) {
  this.containerHtml.style.top  = parseInt(this.containerHtml.style.top) + parseInt(deltaTop) + "%";
}
else
  this.containerHtml.style.top  = parseInt(this.containerHtml.style.top) + parseInt(deltaTop);

if (this.containerHtml.style.left.indexOf('%') != -1) {
  this.containerHtml.style.left  = parseInt(this.containerHtml.style.left) + parseInt(deltaLeft) + "%";
}
else
  this.containerHtml.style.left  = parseInt(this.containerHtml.style.left) + parseInt(deltaLeft);

}

ContainerAutoScroll.prototype.setDimAsynch = function (){
//==================================
  this.setDim(this.width,this.height);
}

ContainerAutoScroll.prototype.setDim = function (width,height){
//==================================
// public
// modifie les dimensions largeur x hauteur de l objet ContainerAutoScroll  
//(avec une hauteur  minimum calcul?e (? revoir si pourcentage))
//   width  (i) : largeur externe de l'objet ContainerAutoScroll 
//      (en pixel ou en pourcentage / parent)
//   height (i) : hauteur externe de l'objet ContainerAutoScroll
//      (en pixel ou en pourcentage / parent)
// appel asynchrone de computeDims pour fixer en cons?quence les dimensions des elts internes

// effets induits sur la position du texte:
//   si agrandissement:
//    - de fa?on g?n?rale un agrandissement au dela de la taille du texte provoque le repositionnement
//      en haut du container
//    - agrandisst par le haut ou par le bas : la position du texte reste inchang?e (m?me 1ere ligne affich?e)
//      sauf cas ci dessus ; le texte est "d?couvert" par le bas 
//   si r?tr?cissement:
//    - 
//--- modification de la largeur de la fenetre d'affichage
//traceExec('setDim width= '+width+' height= '+height,1);
height = (height == null) ? '100%' : height;
width  = (width == null) ? '100%' : width;

this.width = width;
this.height= height;
//alert('containerAutoScroll setDim this.height= '+this.height);

/*if (  width
   && this.containerHtml.style.width)   {
 this.containerHtml.style.width  = width;
}
*/
if (width){
 this.containerHtml.style.width  = width;
}
if (height){
  var strHeight = height + '';
  if ( strHeight.indexOf('%') != -1){
   // a revoir il faudrair calculer la hauteur absolue par pix ... puis verifier le minimum et retranscrir en % !!
// fl   this.containerHtml.style.height = height;
// fl  var heightRef = this.containerHtml.offsetHeight;

//Pb si parent non encore fix?; idem plus bas avec l'usage de oHtmlCadreInt , oHtmlTexte ?
//alert('containerAutoScroll setDim height relative');
    var heightRef = this.containerHtml.parentNode.offsetHeight * parseInt(height) / 100;
//   alert('heightRef= '+heightRef);
  }
  else {
//   this.containerHtml.style.height  =  Math.max(
    // minimum de 2 pixels (+ acces haut et bas si demand?s)
//alert('containerAutoScroll setDim height absolue');
   var heightRef                  =  Math.max(
                                           height,
//                                          getComputStyleIf(this.oHtmlBarreAction,'height')  
                                             (!this.optionAccesHaut ? 0 : 10)
                                            + (!this.optionAccesBas  ? 0 : 10)
                                            + 2
                                         );
//alert('containerAutoScroll setDim heightRef= '+heightRef);
/*
   this.containerHtml.style.height =  Math.max(
                                           height,
    
                                           getComputStyleIf(this.oHtmlBarreAction,'height')  
                                            + (!this.optionAccesHaut ? 0 : 10)
                                            + (!this.optionAccesBas  ? 0 : 10)
                                            + 2
                                         );
*/
/*
// pb lorsque cette methode est appell?e avant chargt ds le document (appel depuis cadreFenetre)
// avec IE currentSTyle appell?e par getComputStyle ne renvoie pas les val du css mais les val par defaut 
// --> val litt?rales 10 + 10 (conforme aux valeurs ds visu.css 
//a revoir
// ne peut pas etre regl? par 1 asynchronisme (execAfterload()) : risque de circularit?
                                         + (!this.optionAccesHaut ? 0 : getComputStyle(this.oHtmlAccesHaut,'height'))
                                         + (!this.optionAccesBas ? 0 : getComputStyle(this.oHtmlAccesBas,'height'))
*/
  }
}
// code suivant ? partager avec la methode moddim
  var bBottom = this.bDisplBottomText();
  var bTop = this.bDisplTopText();
  traceExec('modDim bTop = '+bTop,10);
//  alert('containerAutoScroll setDim this.oHtmlTexte.style.height= '+this.oHtmlTexte.style.height);
  this.reaffInterfaceScroll(bBottom,bTop,heightRef,this.oHtmlTexte.style.height);

  // mise ? jour taille externe diff?r?e apr?s mise ? jour taille interne (par computeDims) / pb avec IE
  // attention pour IE une raison myst?rieuse fait que cette affectation doit avoir lieu non seulement
  // apres computeDims pour la raison enonc?e ci-dessus mais ?galement apr?s l'appel de loadLimitsDyn()
this.containerHtml.style.height = heightRef ;
}

ContainerAutoScroll.prototype.reactive = function () {
	//traceExec('reactive',1);
	this.modDim(0,0);
}
		
ContainerAutoScroll.prototype.modDim = function (dWidth,dHeight){
//==================================
// public
// modifie les dimensions largeur x hauteur de l objet ContainerAutoScroll  
//(avec une hauteur  minimum calcul?e (? revoir si pourcentage))
//   dWidth  (i) : variation de la largeur externe de l'objet ContainerAutoScroll 
//   (en pixel ou en pourcentage / taille courante)
//   dHeight (i) : variation de la hauteur externe de l'objet ContainerAutoScroll
//   (en pixel ou en pourcentage / taille courante)
// appelle direct de computeDims pour fixer en cons?quence les dimensions des elts internes

// restriction : ne peut ?tre appell?e qu'apr?s chargement dans le document des elements du container
// sinon utiliser setDim pour un calcul asynchrone ? l aide de execAfterLoad_2

// effets induits sur la position du texte:
//   si agrandissement:
//    - de fa?on g?n?rale un agrandissement au dela de la taille du texte provoque le repositionnement
//      en haut du container
//    - agrandisst par le haut ou par le bas : la position du texte reste inchang?e (m?me 1ere ligne affich?e)
//      sauf cas ci dessus ; le texte est "d?couvert" par le bas 
//   si r?tr?cissement:
//    - 

// a voir : impact de dHeight sur this.height qui conserve la d?finition de la hauteur
// utilis? dans placeIn -> execafterload setDim
// si this.height = 100% que faire apres setMod(,-20) ?
// si setMod d?clench? par 1 synchro (par ex avec container de fenetre et ReSize de fenetre -> afterResize -> modDimContainer -> modDim)
// this.height devrait rester ? 100%

//--- modification de la largeur de la fenetre d'affichage
traceExec('modDim dWidth= '+dWidth+' dHeight= '+dHeight,31);
traceExec('modDim this.containerHtml.style.width = '+this.containerHtml.style.width,31);
traceExec('modDims this.containerHtml.offsetWidth= '+this.containerHtml.offsetWidth,31);
/*
fl if (  dWidth
   && this.containerHtml.style.width)   {
    this.containerHtml.style.width  = parseInt(this.containerHtml.style.width) + dWidth;
}
*/

/*
var widthRef = (this.containerHtml.style.width ? this.containerHtml.style.width 
                                               : this.containerHtml.offsetWidth)
                + ((dWidth < 0) ? dWidth:0);// + dWidth; 
*/
// variation de largeur exprim?e en %
//alert(dWidth);
// si mod exprim?e en % calcul de la val absolue
var strDWidth=  dWidth + '';
if (strDWidth.indexOf('%') != -1) {
    dWidth = this.containerHtml.offsetWidth * parseInt(dWidth) / 100;
//    alert('dWidth transform?e= '+dWidth);
}    
//else

var widthRef;
// 1er passage style.width non fix?e == auto
if (this.containerHtml.style.width  == '')
   if (dWidth < 0)
        widthRef = this.containerHtml.offsetWidth + dWidth; 
   // ?largissement (contrairement au r?tr?cissement!) offsetWidth tient d?ja compte de la modif de dim
   else
        widthRef = this.containerHtml.offsetWidth ; //  +  (this.containerHtml.style.width ? dWidth : 0)
else
   widthRef = this.containerHtml.offsetWidth + dWidth; //((dWidth < 0) ? dWidth:0);// + dWidth; 

/*
var widthRef = this.containerHtml.offsetWidth  +  (this.containerHtml.style.width ? dWidth : 0)
//var widthRef = this.containerHtml.offsetWidth + dWidth; //((dWidth < 0) ? dWidth:0);// + dWidth; 
//var widthRef = this.containerHtml.offsetWidth + dWidth; //((dWidth < 0) ? dWidth:0);// + dWidth; 
*/
//alert('widthRef ='+widthRef);

/*
if (dWidth){
    if (   this.containerHtml.style.width
        && this.containerHtml.style.width.indexOf('%') == -1)   {
     this.containerHtml.style.width  = parseInt(this.containerHtml.style.width) + dWidth;
    }
    else {
      var strDWidth =  dWidth + '';
      if ( strDWidth.indexOf('%') != -1){
        var prct = 100 + parseInt(strDWidth);
      }
      else {
        var prct =   100 
                   + (  (parseInt(strDWidth) / parseInt(this.containerHtml.offsetWidth))
                      * 100); 
      }
      this.containerHtml.style.width = prct + '%';
    }
}
*/
//--- modification de la hauteur de la fenetre d'affichage
// calcul et conservation (heightRef) de la nvlle taille du container pour application
// apres modif elts internes
if (dHeight){

    var strDHeight =  dHeight + '';
    if ( strDHeight.indexOf('%') != -1) {
   // a revoir il faudrair calculer la hauteur absolue par pix ... puis verifier le minimum et retranscrir en % !!
//   this.containerHtml.style.height = parseInt(this.containerHtml.style.height) + dHeight;
    dHeight = this.containerHtml.offsetHeight * parseInt(dHeight) / 100;
        var heightRef = parseInt(this.containerHtml.style.height) + dHeight;
    }
    else {
//   this.containerHtml.style.height =  parseInt(this.containerHtml.style.height) + dHeight;
       var height =  parseInt(this.containerHtml.style.height) + dHeight;
//   this.containerHtml.style.height  =  Math.max(
       var heightRef                  =  Math.max(
                                           height,
//                                          getComputStyleIf(this.oHtmlBarreAction,'height')  
                                            + (!this.optionAccesHaut ? 0 : 10)
                                            + (!this.optionAccesBas  ? 0 : 10)
                                            + 2
                                         );
    }

  var bBottom = this.bDisplBottomText();
  var bTop = this.bDisplTopText();
  traceExec('modDim bTop = '+bTop,10);

  // alors qu'un partie du doct ?tait masqu? le document devient entierement affichable :
  // aucun elt de scrolling n'est plus necessaire
  traceExec('ContainerAutoScroll.modDim height = '+height+' this.oHtmlTexte.style.height= '+this.oHtmlTexte.style.height,31);
  if (     (height >= parseInt(this.oHtmlTexte.style.height)) 
      &&   (this.partieDoctCachee)) {
    this.passBascule = true;
    traceExec('moddim avant suppToutScroll',10);
    this.suppToutScroll();
    this.passBascule = false;
    this.partieDoctCachee = false;
    traceExec('moddim avant moveTopText',10);

    this.oHtmlTexte.style.top = 0;
    if (this.cursTexte){
       traceExec('moveTop Text av synchro() ');
       this.cursTexte.synchro();
    }     


  //this.moveTopText();
  }
  // alors que le document ?tait complemtement visible une portion devient masqu?e:
  // r?affichage des elts de scrolling
  else
  if (     (height < parseInt(this.oHtmlTexte.style.height)) 
      &&   (!this.partieDoctCachee)) {
    this.partieDoctCachee = true;
    traceExec('moddim avant reactiveSCroll',10);
    this.passBascule = true;
    this.reactiveScroll();
    this.passBascule = false;
  }
}
if (   dHeight 
    || dWidth){
/*
    || (   dWidth
        &&(window.getComputedStyle != undefined))) {
*/
//---- (re)calcule la taille du cadre interne, en fonction des elts de scroll presents
  traceExec('-> computeDims heightRef= '+heightRef+ ' widthRef= '+widthRef,31);
  this.computeDims(heightRef,  widthRef);
}

if (dHeight) {
// racourcissement du cadreInt
  if (bBottom) 
      this.oHtmlTexte.style.top = Math.min(0 ,
                                    (   -1 * parseInt(this.oHtmlTexte.style.height)
                                     +  parseInt(this.oHtmlCadreInt.style.height)));
  if (this.cursTexte) {
      this.cursTexte.loadLimitsDyn();
//      if (!bTop||bBottom)
        this.cursTexte.synchro();
  }

  // mise ? jour taille externe diff?r?e apr?s mise ? jour taille interne (par computeDims) / pb avec IE
  // attention pour IE une raison myst?rieuse fait que cette affectation doit avoir lieu non seulement
  // apres computeDims pour la raison enonc?e ci-dessus mais ?galement apr?s l'appel de loadLimitsDyn()
  this.containerHtml.style.height = heightRef ;
}

// largeur fix?e uniquement par FFox 
//      a revoir n'a ?t? test? que ds le cas de fenetre ou width est initialis? avec ''
//      if (window.getComputedStyle != undefined)
   if (dWidth) 
     this.containerHtml.style.width  = widthRef;

traceExec('modDims sortie this.containerHtml.style.height= '+this.containerHtml.style.height,31);
traceExec('modDims sortie this.containerHtml.style.width= '+this.containerHtml.style.width,31);
}

ContainerAutoScroll.prototype.heightMin = function () {
//=====================================
// ? revoir + complexe tenir compte fleches haut bas ...
  return   Math.max (50,
                    (  getComputStyleIf(this.oHtmlAccesHaut,'height')
                     + getComputStyleIf(this.oHtmlAccesBas,'height')));
}

ContainerAutoScroll.prototype.posNd = function (ndTok){
//=================================
// positionnement sur 1 nd (liste ger?e par obj OutilSearch)
  //-- supprime apparence dernier occ avec focus

  if (this.searchOccFocus) {
    var noTok = this.searchOccFocus.nodeName.substr(3,this.searchOccFocus.nodeName.length-3);
    this.searchOccFocus.className = 'token'+noTok+'Visible';
  }

  ndTok.className = 'tokenFocus';
  this.searchOccFocus = ndTok;

  this.posLine(ndTok.noLine);
}

ContainerAutoScroll.prototype.posOcc = function (noTok,noOcc){
//==================================
  //-- supprime apparence dernier occ avec focus
  if (this.searchOccFocus) {
    var noTok = this.searchOccFocus.nodeName.substr(3,this.searchOccFocus.nodeName.length-3);
    this.searchOccFocus.className = 'token'+noTok+'Visible';
  }
  var lNdTok =document.getElementsByTagName('TOK'+noTok);
  var ndTok = lNdTok[noOcc-1];
  this.searchOccFocus = ndTok;
  ndTok.className = 'tokenFocus';

  this.posLine(ndTok.noLine);
}

ContainerAutoScroll.prototype.bDisplTopText = function (){
//============================================
traceExec('bDisplTopText this.oHtmlTexte.style.top= '+this.oHtmlTexte.style.top,10);
 return (parseInt(this.oHtmlTexte.style.top) == 0);
}

ContainerAutoScroll.prototype.bDisplBottomText = function (){
//============================================

 return  (parseInt(this.oHtmlTexte.style.top)
          ==   (    -1 * parseInt(this.oHtmlTexte.offsetHeight)
                +   parseInt(this.oHtmlCadreInt.style.height)));
}

ContainerAutoScroll.prototype.moveTopText = function (){
//=======================================
this.oHtmlTexte.style.top = 0;
  if (this.cursTexte){
     traceExec('moveTop Text av synchro() ');
     this.cursTexte.synchro();
  }     
/*autre possibilit? mais oblige a avoir cursTexte d?fini
this.cursTexte.fixeProp(0); 
*/
}

ContainerAutoScroll.prototype.moveBottomText = function (){
//==========================================
  this.oHtmlTexte.style.top = Math.min(0 ,
                                    (   -1 * parseInt(this.oHtmlTexte.style.height)
                                     +  parseInt(this.oHtmlCadreInt.style.height)));

  if (this.cursTexte)
    this.cursTexte.loadLimitsDyn();

  if (this.cursTexte)
     this.cursTexte.synchro();

/*autre possibilit? mais oblige a avoir cursTexte d?fini
    this.cursTexte.loadLimitsDyn(); //a revoir
    this.cursTexte.fixeProp(1); 
*/}

ContainerAutoScroll.prototype.posLine = function (noLine) {
//==========================================
  this.oHtmlTexte.style.top = -1 * ((noLine -1) * this.oHtmlTexte.pxHLine);
}

ContainerAutoScroll.prototype.scrollLineText = function (sens, nbLine) {
//==========================================
  this.oHtmlTexte.style.top = parseInt(this.oHtmlTexte.style.top) -  nbLine * this.oHtmlTexte.pxHLine;
}

ContainerAutoScroll.prototype.scrollTextDown = function (nbLine,vitesse,sansEntretien) {
//==========================================
traceExec('scrollTextDown',20);
 this.scroll     = true;
 this.scrollDown = true;
 this.scrollText('Down',nbLine,vitesse,null,sansEntretien);
}

ContainerAutoScroll.prototype.scrollTextUp = function (nbLine,vitesse,sansEntretien) {
//========================================
traceExec('scrollTextUp',20);
 this.scroll     = true;
 this.scrollUp = true;
 this.scrollText('Up',nbLine,vitesse,null,sansEntretien);
}

ContainerAutoScroll.prototype.scrollText = function (sens, nbLine, vitesse,id, sansEntretienMvt) {
//======================================
// 1er appel pas de id transmis
 //---  obj concern?
 var oThis, oHtml;
 if (id){
   oHtml = document.getElementById(id);
   oThis = oHtml.oCiu;
 }

 else
   oThis = this;

traceExec('oThis.id= '+oThis.idObjComp,20);
traceExec('getComputStyle(This.oHtmlTexte,height)= '+getComputStyle(oThis.oHtmlTexte,'height'),20);
traceExec('oThis.oHtmlTexte.offsetHeight= '+oThis.oHtmlTexte.offsetHeight,20);
traceExec('oThis.oHtmlCadreInt.style.height= '+oThis.oHtmlCadreInt.style.height,20);
 // pas de scroll si hauteur texte < hauteur fenetre de visualisation
 if   (oThis.oHtmlTexte.offsetHeight <  parseInt(oThis.oHtmlCadreInt.style.height)) {
   // a revoir positionnt du flag oThis.scroll ? false ?
   return;
 }
traceExec('scrollText cdt? de scroll r?unies',20);
traceExec('scrollText oThis.oHtmlTexte.style.top= '+oThis.oHtmlTexte.style.top,20);
 //--- scroll enclench?
 if (!oThis.scroll) return;
 if (!eval('oThis.scroll'+sens)) return;

 if (sens == 'Down')   {
  var butee = -1 * oThis.oHtmlTexte.offsetHeight
              + parseInt(oThis.oHtmlCadreInt.style.height);
  oThis.oHtmlTexte.style.top = Math.max(butee,
                                         (parseInt(oThis.oHtmlTexte.style.top)
                                          -  nbLine * oThis.oHtmlTexte.pxHLine));

  /*
   oThis.oHtmlTexte.style.top =  max = Math.max((-1 * oThis.oHtmlTexte.offsetHeight
                                          + parseInt(oThis.oHtmlCadreInt.style.height)),
                                         (parseInt(oThis.oHtmlTexte.style.top)
                                          -  nbLine * oThis.oHtmlTexte.pxHLine));
  */
 }
 else  { // == 'Up'
  oThis.oHtmlTexte.style.top = Math.min(  0,
                                         (parseInt(oThis.oHtmlTexte.style.top)
                                         +  nbLine * oThis.oHtmlTexte.pxHLine));
 }
 if (oThis.cursTexte)
     oThis.cursTexte.synchro();
 
 traceExec('scrollText sens = '+sens+' oThis.oHtmlTexte.style.top= '+oThis.oHtmlTexte.style.top,20);

if (!sansEntretienMvt) {
  //----  entretien du mouvement
  //window.status = 'srollText : entretien du mvt id = '+oThis.idObjComp+'_cadreExt';
  oThis.scrollTextTimeout = setTimeout('ContainerAutoScroll.prototype.scrollText(\"'
                                          +sens +'\",\"' + nbLine+'\",\"'+vitesse+'\",\"'+oThis.idObjComp+'_cadreExt'
                                       +'\")',vitesse);
}
}

ContainerAutoScroll.prototype.autoScroll = function (mode){
//=========================================================
// mode = ascenseurD, ascenseurG  le defilement est coontroler par une bande ? droite ou ? gauche de la zone d edition
//      = zones  le defilement est control? sur toutes la zone d edition plus 2 bandes d acces directe en haut et en bas
//      = mixte  le defilement est control? par une bande ? droite ou a gauche plus 2 bandes d acces directe en haut et en bas
  if (this.existModePreDef (mode)) {
//   this.autoScrollSurTexte(suppression=true);

    this.fixeEltScroll(ContainerAutoScroll.prototype.modePreDefEltsPresents[mode],'ajout');
    this.fixeEltScroll(ContainerAutoScroll.prototype.modePreDefEltsAbsents[mode],'supp');

    if (mode == 'NoScroll')
      this.opt['Meta'].CoherenceAuto = false; // pour eviter la mise en place auto d 1 scroll minimum
    this.fixeModalitesParticulieres(ContainerAutoScroll.prototype.modePreDefComportements[mode]);
    //this.autoScrollMin();
  }
/*
switch (mode) {
 case 'Ascenseur' :
                 this.fixeEltScroll(['Ascenseur','AscHautFleche','AscBasFleche'],'ajout');
                 this.fixeEltScroll(['AccesBas','AccesHaut'],'supp');
                 break;
 case 'Zones'      :
                 this.fixeEltScroll(['AccesBas','AccesHaut','AscHautFleche','AscBasFleche'],'ajout');
                 this.fixeEltScroll('Ascenseur','supp');
                 break;
 case "Mixte"      :
                 this.fixeEltScroll(['Ascenseur','AccesBas','AccesHaut','AscHautFleche','AscBasFleche'],'ajout');
                 break;
}
*/
}

ContainerAutoScroll.prototype.positionAscenseur2 = function (position,win) {
//======================================================================
// ss doute ? revoir pas tr?s bien int?gr?
traceExec('posAsc position= '+position,9);
this.optionPosAsc = ((position&&!win)? position : null) || this.optionPosAsc || 'right';
this.optionPosAscWin = ((position&&win)? position : null) || this.optionPosAscWin || 'left';
traceExec('posAsc this.optionPosAsc= '+this.optionPosAsc,9);
traceExec('posAsc this.optionPosAscWin= '+this.optionPosAscWin,9);

// ascenseur affich?
if (this.optionAscenseur) {
  // ? gauche
  if (this.optionPosAsc == 'left'){
         this.oHtmlAscenseur.className += ' posLeft';

//     this.oHtmlTexte.className += ' posLeft';
//     this.oHtmlCadreInt.className += ' posLeft';
// discrimnation Moz IE ? revoir 
         if (window.getComputedStyle != undefined)
            this.oHtmlTexte.className += ' zoneDecalee';
         else
            this.oHtmlTexte.className += ' texteDecale';


         if (    this.optionAccesHaut
             &&  this.optionAscHautFleche)
            this.oHtmlAscHautFleche.className += ' posLeft';
         if (    this.optionAccesBas
             &&  this.optionAscBasFleche)
            this.oHtmlAscBasFleche.className += ' posLeft';
     
  }
  // ? droite
  else {
     this.oHtmlAscenseur.className = this.oHtmlAscenseur.className.replace(/ posLeft/g,'') ;

//     this.oHtmlTexte.className = this.oHtmlTexte.className.replace(/ posLeft/g,'') ;
//     this.oHtmlCadreInt.className = this.oHtmlCadreInt.className.replace(/ posLeft/g,'') ;


     if (window.getComputedStyle != undefined)
       this.oHtmlTexte.className = this.oHtmlTexte.className.replace(/ zoneDecalee/g,'') ;
     else
       this.oHtmlTexte.className = this.oHtmlTexte.className.replace(/ texteDecale/g,'') ;
     if (    this.optionAccesHaut
         &&  this.optionAscHautFleche)
        this.oHtmlAscHautFleche.className = this.oHtmlAscHautFleche.className.replace(/ posLeft/g,'') ;
     if (    this.optionAccesBas
         &&  this.optionAscBasFleche)
        this.oHtmlAscBasFleche.className = this.oHtmlAscBasFleche.className.replace(/ posLeft/g,'') ;
  
  }
}
}

ContainerAutoScroll.prototype.positionAscenseur = function (position,win) {
//======================================================================
// ss doute ? revoir pas tr?s bien int?gr?
 traceExec('posAsc entree this.oHtmlTexte.style.left= '+this.oHtmlTexte.style.left,31);
traceExec('posAsc entree position= '+position+' win= '+win,31);
traceExec('posAsc entree this.opt["Mod"].PosAsc= '+this.opt.Mod.PosAsc,31);
traceExec('posAsc entree this.opt["Mod"].PosAscWin= '+this.opt.Mod.PosAscWin,31);


//this.optionPosAsc = ((position&&!win)? position : null) || this.optionPosAsc || 'right';
//this.optionPosAscWin = ((position&&win)? position : null) || this.optionPosAscWin || 'left';
this.opt["Mod"].PosAsc    = ((position&&!win)? position : null) || this.opt["Mod"].PosAsc    || 'right';
this.opt["Mod"].PosAscWin = ((position&&win) ? position : null) || this.opt["Mod"].PosAscWin || 'left';
traceExec('posAsc ap init this.opt["Mod"].PosAsc= '+this.opt.Mod.PosAsc,31);
traceExec('posAsc ap init this.opt["Mod"].PosAscWin= '+this.opt.Mod.PosAscWin,31);

if (eval('this.oldPosAsc'+(win?'Win':'')+
         '=='+
         'this.opt["Mod"].PosAsc'+(win?'Win':''))
    ) {traceExec('posAsc deja posit sortie ');  return; }

if (    (   win
         && (this.optionAscenseurWin))
    ||  (   !win
         && (this.optionAscenseur))) {
         
    var typAsc = win ? 'Win': '';
    traceExec('posAsc typAsc = '+typAsc,31);
    // ? gauche
//    if (eval('this.optionPosAsc'+typAsc+' == "left"')){
    if (eval('this.opt.Mod.PosAsc'+typAsc+' == "left"')){
        traceExec('posAsc left',31);
        eval('this.oHtmlAscenseur'+typAsc+'.className +=  " posLeft"');
//     this.oHtmlTexte.className += ' posLeft';
/*     this.oHtmlCadreInt.className += ' posLeft';*/  
/* discrimnation Moz IE ? revoir */
        if (window.getComputedStyle != undefined){
            //this.oHtmlTexte.className += ' zoneDecalee';
                traceExec('posAsc win left --> shift right',31);
            if (typAsc == 'Win'){
                traceExec('posAsc win left --> shift variab this.oHtmlTexte.style.left= '
                +this.oHtmlTexte.style.left+' this.valCssEtroit= '+this.valCssEtroit,31);
                this.oHtmlTexte.style.left =  (parseInt(this.oHtmlTexte.style.left)||0)
                                          + (this.opt['Mod'].AscWinFin ? parseInt(this.valCssEtroit)
                                                                      : parseInt(this.valCssLarge));
            }
            else {
                traceExec('posAsc win left --> shift large this.oHtmlTexte.style.left= '+parseInt(this.oHtmlTexte.style.left)
                +' parseInt(this.valCssLarge)= '+parseInt(this.valCssLarge),31);
              this.oHtmlTexte.style.left =  parseInt(this.oHtmlTexte.style.left)
                                          + parseInt(this.valCssLarge);
               traceExec('posAsc win left --> = '+this.oHtmlTexte.style.left,31);
            }
            this.oldLargTemoin  = this.opt['Mod'].AscWinFin;
        }
        else {
            this.oHtmlTexte.className += ' texteDecale';
        }


         if (    this.optionAccesHaut
             &&  eval('this.optionAscHautFleche'+typAsc))
            eval('this.oHtmlAscHautFleche'+typAsc+'.className += " posLeft"');
         if (    this.optionAccesBas
             &&  eval('this.optionAscBasFleche'+typAsc))
            eval('this.oHtmlAscBasFleche'+typAsc+'.className += " posLeft"');
    }
    // ? droite
    else {
          var eltClassName = 'this.oHtmlAscenseur'+typAsc+'.className';
         eval(eltClassName + '='+ eltClassName + '.replace(/ posLeft/g,"")') ;
//     this.oHtmlTexte.className = this.oHtmlTexte.className.replace(/ posLeft/g,'') ;
//     this.oHtmlCadreInt.className = this.oHtmlCadreInt.className.replace(/ posLeft/g,'') ;


         if (window.getComputedStyle != undefined){
//           this.oHtmlTexte.className = this.oHtmlTexte.className.replace(/ zoneDecalee/g,'') ;
            if (typAsc == 'Win'){
                if (this.oldPosAscWin == 'left') {
                   this.oHtmlTexte.style.left =   parseInt(this.oHtmlTexte.style.left)
                                                - (this.opt['Mod'].AscWinFin ? parseInt(this.valCssEtroit)
                                                                            : parseInt(this.valCssLarge));
//                    this.oldPosAscWin = 'right';
                }
            }
            else
            if (this.oldPosAsc == 'left'){
                   this.oHtmlTexte.style.left =   parseInt(this.oHtmlTexte.style.left)
                                                - parseInt(this.valCssLarge);
//                    this.oldPosAsc = 'right';
            }
            this.oldLargTemoin  = this.opt['Mod'].AscWinFin;
         }                                       
         else
           this.oHtmlTexte.className = this.oHtmlTexte.className.replace(/ texteDecale/g,'') ;
           
         if (    this.optionAccesHaut
             &&  eval('this.optionAscHautFleche'+typAsc)) {
            eltClassName = 'this.oHtmlAscHautFleche'+typAsc+'.className';
            eval(eltClassName+' = '+eltClassName + '.replace(/ posLeft/g,"")');
         }
         if (    this.optionAccesBas
             &&  eval('this.optionAscBasFleche'+typAsc)){
            eltClassName = 'this.oHtmlAscBasFleche'+typAsc+'.className';
            eval(eltClassName +'= '+eltClassName + '.replace(/ posLeft/g,"")');
          }
   }
   

    eval('this.oldPosAsc'+(win?'Win':'')+
     '='+
     'this.opt["Mod"].PosAsc'+(win?'Win':''));
 traceExec('posAsc sortie this.opt["Mod"].PosAsc= '+this.opt["Mod"].PosAsc+
 ' this.opt["Mod"].PosAscWin= '+this.opt["Mod"].PosAscWin,31);  
 traceExec('posAsc sortie this.oHtmlTexte.style.left= '+this.oHtmlTexte.style.left,31);
}

}
ContainerAutoScroll.prototype.svgParamScroll = function () {
//==========================================
//-- svgde liste elts participants au scroll
this.svgListeEltsPresents = this.listeEltsPresents;
this.svgListeEltsAbsents = this.listeEltsAbsents;

//-- svgde modalites appliqu?es/ ces elts
this.svgListeModalites = this.listeModalites;
this.svgOptMetaCoherence = this.opt["Meta"].CoherenceAuto; 
}
ContainerAutoScroll.prototype.restoreParamScroll = function () {
//==========================================
// restaure liste elts participants au scroll
if (this.svgListeEltsPresents) this.listeEltsPresents = this.svgListeEltsPresents;
if (this.svgListeEltsAbsents)  this.listeEltsAbsents  = this.svgListeEltsAbsents;
// r?tablit modalites appliqu?es/ ces elts
if (this.svgListeModalites) this.listeModalites = this.svgListeModalites;
this.opt["Meta"].CoherenceAuto = this.svgOptMetaCoherence;
}
ContainerAutoScroll.prototype.suppToutScroll = function () {
//==========================================
// supprime tout d?filement ; utilis? lorsque contenu contenu
traceExec('suppToutScroll --> svgParamScroll',74);
this.svgParamScroll();

traceExec('suppToutScroll elts svgd?s= '+this.svgListeEltsPresents,74);
traceExec('suppToutScroll mods svgd?s= '+this.svgListeModalites,74);
this.autoScroll('NoScroll');
}

ContainerAutoScroll.prototype.reactiveScroll = function () {
//==========================================
// r?tablit liste elts participants au scroll
traceExec('reactiveScroll',74);
this.restoreParamScroll();
  traceExec('react this.listeModalites= '+this.listeModalites,9);

this.initOptionsModePreDef();
  traceExec('reactiveScroll elts= '+this.listeEltsPresents,9);
  traceExec('reactiveScroll mods= '+this.listeModalites,9);
this.fixeEltScroll(null,null,true);
this.fixeModalitesParticulieres();
}

ContainerAutoScroll.prototype.fixeModalitesParticulieres = function (elements) {
//======================================================
//if (!elements)  return;
var elts;

if (elements) {
    if (!(elements instanceof Array)){
      elts  = new Array();
      elts[0] = elements;
    }
    else
      elts = elements;
}
// 
else {
   elts = new Array();
   elts = this.listeModalites.split("#");
   elts.pop();
}
    
for (var i=0; i < elts.length; i++) {
  elt = elts[i];

  var opt  = 'this.opt["Mod"].'+ elt ;
  eval(opt);   // par ex this.opt['Mod'].DDInteractif = true;
}

// position ascenseur (type window ou type temoin pos dans texte)
//  if (this.opt['Mod'].PosAscWinLeft)
//      this.positionAscenseur(this.opt['Mod'].PosAscWin,ascWin=true);
traceExec('-> positionAscenseur depuis fixeModalitesParticulieres',31);
    this.positionAscenseur(this.opt['Mod'].PosAscWinLeft?'left':'right',ascWin=true);
//  else
//    this.positionAscenseur('right',ascWin=true);

  // ascenseur temoin pos ?troit
  if (this.opt['Mod'].AscWinFin) {
    this.barreTemoinPosEtroite(true);
/*    this.cursTemoinPos.oHtmlFixe.style.width = this.valCssEtroit; 
    this.cursTemoinPos.oHtmlMobile.style.width = this.valCssEtroit;
    this.oHtmlAscenseurWin.className += ' etroit';
*/
  }
  else {
    this.barreTemoinPosEtroite(false);
/*    this.cursTemoinPos.oHtmlFixe.style.width = this.valCssLarge; 
    this.cursTemoinPos.oHtmlMobile.style.width = this.valCssLarge;  
    this.oHtmlAscenseurWin.className = this.oHtmlAscenseurWin.className.replace(/ etroit/g,'');
*/
  }

// position barre gradient de deplact auto
//  if (this.opt['Mod'].PosAscLeft)
//    this.positionAscenseur(this.opt['Mod'].PosAsc);
traceExec('-> positionAscenseur depuis fixeModalitesParticulieres',31);
    this.positionAscenseur(this.opt['Mod'].PosAscLeft?'left':'right');
//  else
//    this.positionAscenseur('right');
  
  // Drag and drop direct sur le texte fa?on Acrobat
  this.oHtmlTexte.dragAndDrop = this.opt['Mod'].DDInteractif;
    
  // curseur mobile = temoin de position non DD par l'utilisateur
  this.cursTemoinPos.oHtmlMobile.dragAndDrop = !this.opt['Mod'].TemoinPos;
  // reperc sur comport fleches comport oHtmlFixe
  if (this.opt['Mod'].TemoinPos) {
       this.oHtmlAscBasFlecheWin.onclick = ContainerAutoScroll.eventHandlers.onclickBas;

       this.oHtmlAscBasFlecheWin.onmousedown = null;
       this.oHtmlAscBasFlecheWin.onmouseup   = null;//ContainerAutoScroll.eventHandlers.onMouseUpFlecheBasAscWin;
       this.oHtmlAscBasFlecheWin.onmousemove = function (e) {if (!e) e = window.event; stopEvent(e);}

       this.oHtmlAscHautFlecheWin.onclick = ContainerAutoScroll.eventHandlers.onclickHaut;

       this.oHtmlAscHautFlecheWin.onmousedown = null;
       this.oHtmlAscHautFlecheWin.onmouseup   = null;//ContainerAutoScroll.eventHandlers.onMouseUpFlecheBasAscWin;
       this.oHtmlAscHautFlecheWin.onmousemove = function (e) {if (!e) e = window.event; stopEvent(e);}

       this.oHtmlPiloteScrollWin.onclick = null;
       if (this.opt['Mod'].ScrollSurTemoinPos)
         this.oHtmlPiloteScrollWin.onmousemove  = null;//ContainerAutoScroll.eventHandlers.onmousemoveAscWin; 
       else
         this.oHtmlPiloteScrollWin.onmousemove  = function (e) {if (!e) e = window.event; stopEvent(e);}//ContainerAutoScroll.eventHandlers.onmousemoveAscWin; 
       this.oHtmlPiloteScrollWin.onmouseout  = null;//ContainerAutoScroll.eventHandlers.onmouseoutAscWin; 
  }
  else {
       this.oHtmlAscBasFlecheWin.onmousedown = ContainerAutoScroll.eventHandlers.onMouseDownFlecheBasAscWin;
       this.oHtmlAscBasFlecheWin.onmouseup   = ContainerAutoScroll.eventHandlers.onMouseUpFlecheBasAscWin;
       this.oHtmlAscBasFlecheWin.onmousemove = function (e) {if (!e) e = window.event; stopEvent(e);}

       this.oHtmlAscHautFlecheWin.onmousedown = ContainerAutoScroll.eventHandlers.onMouseDownFlecheHautAscWin;
       this.oHtmlAscHautFlecheWin.onmouseup   = ContainerAutoScroll.eventHandlers.onMouseUpFlecheHautAscWin;
       this.oHtmlAscHautFlecheWin.onmousemove = function (e) {if (!e) e = window.event; stopEvent(e);}

       this.oHtmlPiloteScrollWin.onclick = ContainerAutoScroll.eventHandlers.onMouseClickAscWin;
       this.oHtmlPiloteScrollWin.onmousemove  = ContainerAutoScroll.eventHandlers.onmousemoveAscWin; 
       this.oHtmlPiloteScrollWin.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseoutAscWin; 
  }
  
  // d?filement auto par position du pointeur sur le texte
  this.autoScrollSurTexte(suppression=!this.opt['Mod'].AutoScrollSurTexte);

  if (elements) 
    this.majListeModalites();
}

ContainerAutoScroll.prototype.fixeEltScroll = function (elements,mode,ssReDim) {
//==========================================
// force la pr?sence (mode = 'ajout') ou l'absence (mode != 'ajout') d elts du scroll
// si elements n'est pas sp?cifi?  this.listeEltsPresents constitue la liste de r?f?rence des elts ? prendre en compte
// il s'agit alors d'un affichage (ajout) forc? (il n'y a pas de bascule ? r?aliser le flag ?tant d?ja positionn?)

// si ssReDim = true les tailles des divs ne st pas recalcul?es ( = cas particuliers du constructeur de la classe ContainerScroll
//  pour lequel les divs ne st pas encore charg?es ds le doct et qui r?alise de tte fa?on un appel de computeDims apres celui de fixeEltScroll
// devenu inutile avec asynchronisme de affInterfaceScroll ...
var dejaEnregistres= false;
var elts;
//---- elts ? afficher d?finis par this.listeEltsPresents 
// --> attributs-option d?ja = true mais className non encore modifi?e
if (!elements) {
  elts  = new Array();   
 dejaEnregistres = true;
 mode = 'ajout';
 elts = this.listeEltsPresents.split('#');
 elts.pop();
}
//--- elts ? afficher ou supprimer pass?s en argt
else {
 if (!(elements instanceof Array)){
  elts  = new Array();
  elts[0] = elements;
 }
 else
  elts = elements;
}

//--- pour chaque elt
for (var i=0; i < elts.length; i++) {
  elt = elts[i];
  var tokElt = elt + '#';
  //-- elt inconnu
  if (ContainerAutoScroll.prototype.listeEltsScroll.indexOf(tokElt) ==  -1) {
       break; //return;
  }
  //-- affichage : changt classname + changt val bool?enne attribut-option
  // effectue uniqut si option-flag = false ou si mode particulier "dejaEnregistres" (cad opt? pr?positionn?e mais
  // chgt de className non r?alis?)
  var opt  = 'this.option'+ elt ;
  if (mode == 'ajout'){
      if (   (!eval(opt))
          || (dejaEnregistres))
         this.basculeScroll(elt,dejaEnregistres,ssReDim);
  }
  //-- masquage : changt classname + changt val bool?enne attribut-option
  // uniquement si actuellement flag-option = true
  else
      if (eval(opt))
         this.basculeScroll(elt,dejaEnregistres,ssReDim);
}

}

ContainerAutoScroll.prototype.basculeScroll = function (elements,dejaEnreg,ssReDim) {
//==================================================================
// bascule chacun des ?l?ments de l interface participant au scroll
// de l'etat affich? ? l ?tat masqu? ou vice versa
//   restriction : pour afficher les fleches il faut avoir affich? soit une barre d acces direct soit une zone ascenseur
//traceExec('fl basculeScroll ',1);
var bAsc;
if (  !this.opt['Meta'].bascule
   && !this.passBascule) {
  alert('Ce container n\'offre pas la possibilit? de modifier son interface de d?filement de contenu');
  return;
}
//-- plact des elts ds 1 tableau
if (!elements)  return;
var elts;
if (!(elements instanceof Array)){
  elts  = new Array();
  elts[0] = elements;
}
else
  elts = elements;

var modeScroll;
// pour chaque elt : 
for (var i=0; i < elts.length; i++) {
    modeScroll = elts[i];
    //-- elt inconnu
    if (ContainerAutoScroll.prototype.listeEltsScroll.indexOf(modeScroll) ==  -1) {
       break; //return;
    }
    var opt  = 'this.option'+ modeScroll ;
    
    //if (this.deborde()) {

    // l' ensemble du doct est visible ds cadreInt: enregistrement opt? ds la liste mais 
    // pas de positionnement de l'option ni de mise en oeuvre
    if (!this.partieDoctCachee) {
       //eval( opt + '= !' + opt);
       //this.majListeEltsPresents (modeScroll, eval(opt) ? 'ajout':'retrait');     
       this.majListeEltsPresents( modeScroll
                                , (this.svgListeEltsPresents.indexOf(modeScroll+'#')== -1) ? 'ajout':'retrait'
                                );     
       
       return;
    }

// le reste uniquement si lg du doct s'y prete

    //-- modif className
    // bascule visible -> invisible
    var className = 'this.oHtml' + modeScroll + '.className';
    if (   (eval(opt))
        && (!dejaEnreg)) {
      eval(className + ' += \' masqueEltScroll\'');
    }
    // bascule invisible -> visible
    else {
      var nvClass = eval(className).replace(/ masqueEltScroll/g,'');    // className sans option masque
      eval(className  +' = nvClass');
    }

    //-- modif val bool de l'attribut-option (sauf si d?ja fait ant?rieurt ? l'appel de la methode)
    //   maj this.listeEltsPresents recensant option s?lectionn?es
    if (!dejaEnreg) {
       eval( opt + '= !' + opt);
       this.majListeEltsPresents (modeScroll, eval(opt) ? 'ajout':'retrait');     
    }
    //-- gest? sp?ciale / fl?ches
    if (   'AccesHaut#AccesBas#AscHautFleche#AscBasFleche#AscHautFlecheWin#AscBasFlecheWin'.indexOf(modeScroll)
       != -1)
      this.gereFlechesAccesDirect(modeScroll);
   
    //-- gest? sp?ciale / ascenseurs
    if (modeScroll.indexOf('Ascenseur') != -1)  {
      bAsc  = true;
/*      this.gereAscenseurs(modeScroll);
traceExec(   'basculeScroll modeScroll= '+modeScroll+' argt1= null argt2= '
          +  (modeScroll.indexOf('Win') != -1) , 9);
*/     
traceExec('-> positionAscenseur depuis basculeScroll',31);

       this.positionAscenseur(null,(modeScroll.indexOf('Win') != -1));
    }
    
    }
/*   else {
       eval( opt + '= !' + opt);
       this.majListeEltsPresents (modeScroll, eval(opt) ? 'ajout':'retrait');     
    }

*/

//this.positionAscenseur();

//   this.computeHeightCadreInt();
if (!ssReDim) {
  this.computeDims();
}
if (bAsc) {
  this.gereAscenseurs(modeScroll);
  traceExec(   'basculeScroll modeScroll= '+modeScroll+' argt1= null argt2= '
          +  (modeScroll.indexOf('Win') != -1) , 9);
}
/*
if (this.optionAscenseur) {
   this.oHtmlPiloteScroll.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
   this.oHtmlPiloteScroll.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
   this.oHtmlPiloteScroll.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;

  this.oHtmlCadreInt.onmousemove = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onmousemove;
  this.oHtmlCadreInt.onclick     = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onclickCentre;
  this.oHtmlCadreInt.onmouseout  = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onmouseout;

}

else {
  if (!this.opt['Mod'].DDInteractif) {
   this.oHtmlCadreInt.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
   this.oHtmlCadreInt.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
   this.oHtmlCadreInt.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;
  }
   this.oHtmlPiloteScroll.onmousemove = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onmousemove;
   this.oHtmlPiloteScroll.onclick     = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onclickCentre;
   this.oHtmlPiloteScroll.onmouseout  = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onmouseout;

}
*/
}

ContainerAutoScroll.prototype.gereAscenseurs = function (modeMod) {
//=================================================================
// ascenseur de type gradient
//traceExec('fl gereAscenseurs ',1);
if (modeMod == 'Ascenseur'){
  // ajout
  if (this.optionAscenseur) {
   if (this.oHtmlPiloteScroll.onmousemove == null) {
     this.oHtmlPiloteScroll.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
     this.oHtmlPiloteScroll.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
     this.oHtmlPiloteScroll.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;
   }
   // implicite : scroll auto d?clench? ds ascenseur --> supp d?clenchemment sur le texte
   if (this.opt['Meta'].CoherenceAuto) {
     this.oHtmlCadreInt.onmousemove = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onmousemove;
     this.oHtmlCadreInt.onclick     = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onclickCentre;
     this.oHtmlCadreInt.onmouseout  = null;//ContainerAutoScroll.eventHandlers.fctNull;//ContainerAutoScroll.eventHandlers.onmouseout;
    }
  }
  else
    // implicite : suppression de ts moyen de scroll  --> retablissement des possibilit?s sur le texte
    this.autoScrollMin();
/*
  // implicite : suppression de ts moyen de scroll  --> retablissement des possibilit?s sur le texte
  else {   (   (!this.optionAscenseurWin)      // pas d 'ascenseur 
            || (this.opt['Mod'].TemoinPos))         // ou ascenseur simple temoin sans controle 
        && this.opt['Meta'].CoherenceAuto) {
   if (this.oHtmlCadreInt.onmousemove == null) {
     this.oHtmlCadreInt.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
     this.oHtmlCadreInt.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
     this.oHtmlCadreInt.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;
   }
   }
*/
}
// ascenseur de type ascenseur window ou curseur simple temoin de position
else
if (modeMod == 'AscenseurWin'){
  // ajout
  if (this.optionAscenseurWin) {
    this.couplageAscenseurTexte(true);
  }
  //suppression
  else {
    this.couplageAscenseurTexte(false);  //a revoir option false non implementee
  }
  //controle du curseur mobile
  this.zoneAscModeInteractif (!this.opt['Mod'].TemoinPos);   // appelle autoScrollMin
}

}

ContainerAutoScroll.prototype.autoScrollMin = function () {
//=========================================
// assure la pr?sence d'une possibilit? de scroll par placement du curseur sur le texte
// en l'absence d'autre moyen
//traceExec('fl autoScrollMin ',1);
if (       this.opt['Meta'].CoherenceAuto
        && !this.optionAscenseur
        && !this.opt['Mod'].DDInteractif
        && (   !this.optionAscenseurWin        // pas d ascenseur
            || (this.opt['Mod'].TemoinPos))          // ou simple t?moin sans contr?le
        ) {
     this.oHtmlCadreInt.onmousemove = ContainerAutoScroll.eventHandlers.onmousemove;
     this.oHtmlCadreInt.onclick     = ContainerAutoScroll.eventHandlers.onclickCentre;
     this.oHtmlCadreInt.onmouseout  = ContainerAutoScroll.eventHandlers.onmouseout;      
  }
}

ContainerAutoScroll.prototype.gereFlechesAccesDirect = function (modeMod) {
//=======================================================================
// gere les effets de bords des modifs des fleches ou des bandes d acces direct

//----------------  modification des barres d acces direct  en presence de fleches-----------
if (   (modeMod == 'AccesHaut')
    && this.optionAscHautFleche) {
  // affichage barre acces direct haut
  if (this.optionAccesHaut){
      this.oHtmlAscHautFleche.className += ' dansZoneAccesHB';
      this.oHtmlAccesHaut.appendChild(this.oHtmlAscHautFleche);                  // deplacement de la fleche
      this.oHtmlAccesHaut.className = 'zoneAccesHaut zoneAccesElargie';
  }
  // disparition barre acces direct haut
  else
  if (this.optionAscenseur)  {
//      this.oHtmlAscHautFleche.className = 'zoneAscHautFleche';
      this.oHtmlAscHautFleche.className = 'zoneHautFlecheDirect';
      this.oHtmlAscenseur.insertBefore(this.oHtmlAscHautFleche,this.oHtmlPiloteScroll);
  }
  else
  if (this.optionAscenseurWin)  {
      this.oHtmlAscHautFleche.className = 'zoneAscHautFleche';
      this.oHtmlAscenseurWin.insertBefore(this.oHtmlAscHautFleche,this.oHtmlPiloteScrollWin);
  }
}
else
if (   (modeMod == 'AccesBas')
    && this.optionAscBasFleche) {
  // affichage barre acces direct bas
  if (this.optionAccesBas) {
      this.oHtmlAscBasFleche.className += ' dansZoneAccesHB';
      this.oHtmlAccesBas.appendChild(this.oHtmlAscBasFleche);                  // deplacement de la fleche
      this.oHtmlAccesBas.className = 'zoneAccesBas zoneAccesElargie';
  }
  // disparition barre acces direct bas
  else
  if (this.optionAscenseur)  {
//      this.oHtmlAscBasFleche.className = 'zoneAscBasFleche';
      this.oHtmlAscBasFleche.className = 'zoneBasFlecheDirect';
      this.oHtmlAscenseur.appendChild(this.oHtmlAscBasFleche);
  }
  // disparition barre acces direct bas
  else
  if (this.optionAscenseurWin)  {
      this.oHtmlAscBasFleche.className = 'zoneAscBasFleche';
      this.oHtmlAscenseurWin.appendChild(this.oHtmlAscBasFleche);
  }
}
//----------------  modification des fleches    -----------
else
if (modeMod == 'AscHautFleche') {
    
    // affichage fleche
    if (this.optionAscHautFleche){
      if (this.optionAccesHaut) {  
        this.oHtmlAccesHaut.className = 'zoneAccesHaut zoneAccesElargie';
        this.oHtmlAscHautFleche.className += ' dansZoneAccesHB';
        this.oHtmlAccesHaut.appendChild(this.oHtmlAscHautFleche);                  // deplacement de la fleche
      }
      else
      if (this.optionAscenseur) {
//        this.oHtmlAccesHaut.className = 'zoneAccesHaut ';
//        this.oHtmlAscHautFleche.className = 'zoneAscHautFleche';
        this.oHtmlAscHautFleche.className = 'zoneHautFlecheDirect';
        this.oHtmlAscenseur.insertBefore(this.oHtmlAscHautFleche,this.oHtmlPiloteScroll);
      }
    }
    // masque fleche
    else {
      this.oHtmlAscHautFleche.className += ' masqueEltScroll';
      if (this.optionAccesHaut) {
        this.oHtmlAccesHaut.className = 'zoneAccesHaut';
//        this.oHtmlAscenseur.appendChild(this.oHtmlAscHautFleche);
      }
    }
}
else
if (modeMod == 'AscBasFleche'){
    
    // affichage fleche
    if (this.optionAscBasFleche) {
      if (this.optionAccesBas) {
        this.oHtmlAccesBas.className = 'zoneAccesBas zoneAccesElargie';
        this.oHtmlAscBasFleche.className += ' dansZoneAccesHB';
      //  this.oHtmlAscBasFleche.className = 'zoneAscBasFleche dansZoneAccesHB';
        this.oHtmlAccesBas.appendChild(this.oHtmlAscBasFleche);                  // deplacement de la fleche
      }
      else
      if (this.optionAscenseur) {
//        this.oHtmlAccesHaut.className = 'zoneAccesHaut ';
//        this.oHtmlAscBasFleche.className = 'zoneAscBasFleche';
        this.oHtmlAscBasFleche.className = 'zoneBasFlecheDirect';
        this.oHtmlAscenseur.appendChild(this.oHtmlAscBasFleche);
      }
    }
    // masque fleche
    else 
    if (this.optionAscenseur) {
      this.oHtmlAscBasFleche.className += ' masqueEltScroll';
      if (this.optionAccesBas) {
        this.oHtmlAccesBas.className = 'zoneAccesBas';
//        this.oHtmlAscenseur.appendChild(this.oHtmlAscBasFleche);
      }
    }
}    
else
if (modeMod == 'AscHautFlecheWin') {
      //ajout
      if (this.optionAscHautFlecheWin) {
//        this.oHtmlAccesHaut.className = 'zoneAccesHaut ';
        this.oHtmlAscHautFlecheWin.className = 'zoneAscHautFleche';
        this.oHtmlAscenseurWin.insertBefore(this.oHtmlAscHautFlecheWin,this.oHtmlPiloteScrollWin);
      }
      //supp
      else {
        this.oHtmlAscHautFlecheWin.className += ' masqueEltScroll';
      }
}      
else
if (modeMod == 'AscBasFlecheWin') {
      // ajout
      if (this.optionAscBasFlecheWin) {
//        this.oHtmlAccesHaut.className = 'zoneAccesHaut ';
        this.oHtmlAscBasFlecheWin.className = 'zoneAscBasFleche';
        this.oHtmlAscenseurWin.appendChild(this.oHtmlAscBasFlecheWin);
      }
      // supp
      else {
        this.oHtmlAscBasFlecheWin.className += ' masqueEltScroll';
      }
}      
}

ContainerAutoScroll.eventHandlers = {
//===============================
// private
  fctNull    : function (e) {},
  
  onMouseClickAscWin: function (e) {
// avanc?e de l'amplitude d'1 page ....vers le haut ou vers le bas suivant poition du pointeur / curs mobile
    if (!e) e = window.event;
    var cible = (e.target? e.target : e.srcElement);
    var idEvt = (e.target? e.target.id : e.srcElement.id);
    var oEd = this.oCiu;
    if (cible == oEd.cursTemoinPos.oHtmlMobile) 
       return;

    // nb de lignes correspondant ? l'amplitude du texte visible
    var nbLignes = parseInt(oEd.oHtmlCadreInt.style.height) / oEd.oHtmlTexte.pxHLine ;
    
    // pointeur souris au dessus du curseur mobile --> deplact vers le haut
    var yPRC = e.offsetY ? e.offsetY : e.layerY;
    if (   parseInt(yPRC)
        <  oEd.cursTemoinPos.oHtmlMobile.offsetTop) {
        oEd.scrollTextUp(nbLignes,vitesse=null,unSaut=true);
    }

    // pointeur souris en dessous du curseur mobile --> deplact vers le bas
    else {    
        oEd.scrollTextDown(nbLignes,vitesse=null,unSaut=true);
    }

},
  onMouseDownFlecheHautAscWin: function (e) {
    var prct = 0.5;
    var vit = parseInt(10 + prct * 400);
    var nbLine = (1-prct) * 5;
    if (!e) e = window.event;
    var cible = (e.target? e.target : e.srcElement);
    var idEvt = (e.target? e.target.id : e.srcElement.id);
    var oEd = this.oCiu;
    oEd.scrollTextUp(nbLine,vit);

    stopEvent(e);  
  },
  onMouseDownFlecheBasAscWin: function (e) {
                   var prct = 0.5;
                   var vit = parseInt(10 + prct * 400);
                   var nbLine = (1-prct) * 5;
               if (!e) e = window.event;
              var cible = (e.target? e.target : e.srcElement);
              var idEvt = (e.target? e.target.id : e.srcElement.id);
              var oEd = this.oCiu;
                  oEd.scrollTextDown(nbLine,vit);

    stopEvent(e);  
  },
  onMouseUpFlecheHautAscWin: function (e) {
                var oEd = this.oCiu;

                if (oEd.scroll)
                  clearTimeout(oEd.scrollTextTimeout);
                oEd.scroll = false;
                   oEd.scrollUp   = false;
                   oEd.scrollDown = false;
                  stopEvent(e);  

  },
  onMouseUpFlecheBasAscWin: function (e) {
                var oEd = this.oCiu;

                if (oEd.scroll)
                  clearTimeout(oEd.scrollTextTimeout);
                oEd.scroll = false;
                   oEd.scrollUp   = false;
                   oEd.scrollDown = false;
                  stopEvent(e);  

  },
  onmouseout : function (e){
                var oEd = this.oCiu;

                if (oEd.scroll)
                  clearTimeout(oEd.scrollTextTimeout);
                oEd.scroll = false;
/*
if (oEd.cursTemoinPos  && (!oEd.cursTemoinPos.DDCursTemoin)) {
                  oEd.cursTemoinPos = false;
                }
*/
},
  onclickVersHaut: function(e){
                //this.oCiu.moveTopText();
  },
  onclickVersBas: function(e){
                //this.oCiu.moveTopText();
  },
  onclickHaut: function(e){
                this.oCiu.moveTopText();
  },

  onclickBas: function(e){
              this.oCiu.moveBottomText();
  },
  onclickCentre : function(e){
              var oEd = this.oCiu;
                   if (oEd.scroll)
                     clearTimeout(oEd.scrollTextTimeout);
                   oEd.scroll   = false;
                   oEd.scrollUp   = false;
                   oEd.scrollDown = false;

  },

  onmousemove : function(e){
  	//traceExec('containerAutoScroll handler MM',1);
              if (!e) e = window.event;
              var cible = (e.target? e.target : e.srcElement);
              var idEvt = (e.target? e.target.id : e.srcElement.id);
              var oEd = this.oCiu;
              // pour eviter 1 pb avec IE qui laisse une fine bande entre oHtmlTexte(width=100%) et oHtmlAscenseur
              if (cible == oEd.oHtmlCadreInt) return;
              
              traceExec('Mm oEd.idObjComp= '+oEd.idObjComp+' idEvt= '+idEvt+ ' oEd.id= '+oEd.idObjComp+
              ' oEd.scroll= '+oEd.scroll+' class= '+cible.className,9);
//              traceExec('Mm oEd.cursTemoinPos.DDCursTemoin = '+oEd.cursTemoinPos.DDCursTemoin,3);
//              traceExec('Mm oEd.bCursDsTemoinPosAscWin = '+oEd.bCursDsTemoinPosAscWin,3);
                
                // pour FireFox la gestion du DD sur le curseur mobile n'?tant r?alis?e qu'en aval par le document
                // il faut courtcircuit? ce traitement mais ne pas bloqu? l'?vt
                // (dans IE on ne parvient jamais ? ce code puisque l'evt DD est trait? avant dans cursTemoinPos
                // et les stopEvent figurant ds le trait stadt bloquent la propagation jusqu'ici
                if (oEd.cursTemoinPos && oEd.cursTemoinPos.DDCursTemoin) return true;
                if (oEd.bCursDsTemoinPosAscWin) return true;
              traceExec('Mm exec traitt',3);
              if (oEd.scroll)
                clearTimeout(oEd.scrollTextTimeout);

              var hZoneTexte = parseInt(oEd.oHtmlCadreInt.style.height);

              var hZoneInerte = oEd.oHtmlCadreInt.prctHZoneInerte * hZoneTexte;
              // e.layer ne peut etre emply? ici il fait ref ? la div source de l evt hypoth?se containerHtml parent de oHtmlCadreInt a un top fix?
//             traceExec('e.offsetY='+e.offsetY,20);
//             traceExec('e.clientY='+e.clientY+' oEd.oHtmlCadreInt.offsetTop='+parseInt(oEd.oHtmlCadreInt.offsetTop)
//                       +' oEd.oHtmlCadreInt.parentNode.style.top='+oEd.oHtmlCadreInt.parentNode.style.top,20);
// traceExec('e.pageY='+e.pageY,20);

              traceExec('pos-> '+(   parseInt(oEd.oHtmlCadreInt.offsetTop)
                                                    + compOffsetParent(oEd.oHtmlCadreInt)),20);
              traceExec('e.pageY-> '+   e.pageY,20);
              traceExec('Int offsetTop-> '+   parseInt(oEd.oHtmlCadreInt.offsetTop),20);
              traceExec('offsetParent -> '+ compOffsetParent(oEd.oHtmlCadreInt),20);
// le commentaire suivant est ? prendre avec des pincettes ! l argt semble erronn?
// par contre il faut traiter le cas ou le curseur est sur le texte alors qu'un ascenseur existe d'ou .cibleAscemseur()
              // attention pour IE e.offsetY donne l offset de position de la souris / div source de l evt (ici oHtmlTexte
              // sauf si cette div n'a pas de width ?! ce qui peut tromper !!!
              // d 'o? le calcul suivant
              //  var yPRC = e.offsetY ? e.offsetY abandonn? lorsque width a ?t? fix? pour oHtmlTexte (cf computeDims)
              // ce qui est le cas lorsqu'un ascenseur est ajout?
              traceExec('oEd.oHtmlTexte.style.width= '+oEd.oHtmlTexte.style.width
              +' oEd.oHtmlTexte.style.height= '+oEd.oHtmlTexte.style.height
              +' parseInt(oEd.oHtmlTexte.style.top)= '+parseInt(oEd.oHtmlTexte.style.top)+
              ' e.offsetY= '+e.offsetY,3);
              if (   (oEd.optionAscenseur || oEd.optionAscenseurWin)
                  && ContainerAutoScroll.eventHandlers.cibleAscenseur(cible)) {
                  var yPRC = e.offsetY ? e.offsetY : e.layerY;
traceExec('ContainerAutoScroll.eventHandlers.cibleAscenseur(cible) = '+
ContainerAutoScroll.eventHandlers.cibleAscenseur(cible),2);                  
//traceExec('layerY= '+e.layerY,2);
traceExec('yPRC = '+yPRC,2);
traceExec('hZoneTexte= '+hZoneTexte,2);

                  if (cible == oEd.oHtmlAscCentre) {
traceExec(' cible == oEd.oHtmlAscCentre',2);                 
                    yPRC = yPRC + parseInt(oEd.oHtmlAscSup.style.height);
                  }

                  else
                  if (cible == oEd.oHtmlAscInf) {
traceExec(' cible == oEd.oHtmlAscInf',2);                 
                     if (cible.previousSibling == oEd.oHtmlAscCentre) {
                       yPRC =   yPRC
                              + parseInt(oEd.oHtmlAscSup.style.height)
                              + parseInt(oEd.oHtmlAscCentre.style.height);
                     }
                     else {
traceExec('cible.id= '+cible.id,2);                     
traceExec(' cible == else',2); // ? revoir ds Fx :si on se situe au debut de asc inf (=vitesse lente)
							   // yPRC = 76 par ex
							   // alors que ds IE yPRC= 14
                       yPRC += (hZoneTexte / 2);  // equivalent ? +=oEd.oHtmlSup.style.height ?
					 }
                   }

              }

              else {
traceExec('pageY= '+e.pageY,9);
                  // (oEd.oHtmlTexte.style.top est <= 0 !)
                  var yPRC = e.offsetY ? (e.offsetY + parseInt(oEd.oHtmlTexte.style.top))
                                   : ( // (  e.clientY + document.body.scrollTop)      // = position absolue / page
                                        e.pageY
                                      - (   parseInt(oEd.oHtmlCadreInt.offsetTop)
                                                    + compOffsetParent(oEd.oHtmlCadreInt)));
              }

              var hZoneSensible = (hZoneTexte / 2) - (hZoneInerte / 2);
traceExec('hZoneSensible= '+hZoneSensible,2);              
//              traceExec('h zone sensible='+hZoneSensible+' h zone inerte='+hZoneInerte,3);
//              traceExec('yPRC='+yPRC,3);
              if    (   yPRC
                      <  (  (hZoneTexte / 2)
                          - (hZoneInerte / 2)) ){
                   //    window.status = 'oEd.idObjComp = '+this.oCiu.idObjComp;
                   //    window.status = 'Zone sensible : d?filement du texte vers le haut (+ le curseur est haut + la vitesse est grande)';
//                //rialto   window.status = 'oEd.idObjComp= '+oEd.idObjComp +'vers le haut yPRC = '+yPRC + '< bas';
                  //rialto window.status = 'cible= '+cible.id+ 'vers le haut yPRC = '+yPRC + '< bas';
//                   traceExec('cible= '+cible.id+ 'vers le haut yPRC = '+yPRC + '< bas',3);
                   var prctHaut = yPRC / hZoneSensible;
                   var vit = parseInt(10 + prctHaut * 400);
                   var nbLine = (1-prctHaut) * 5;

traceExec('prctHaut = '+prctHaut,2);
                   oEd.scrollTextUp(nbLine,vit);
              }

              else
              if    (   yPRC
                      >  (  (hZoneTexte / 2)
                          + (hZoneInerte / 2) )) {
                 //  window.status = 'Zone sensible : d?filement du texte vers le bas (+ le curseur est bas + la vitesse est grande)';
//                   window.status = 'oEd.idObjComp= '+oEd.idObjComp +' vers le haut yPRC = '+yPRC + '> bas';
// rialto                   window.status ='cible= '+cible.id+ +' vers le bas yPRC = '+yPRC + '>  bas';
//                   traceExec('cible= '+cible.id+ +' vers le bas yPRC = '+yPRC + '>  bas',3);

                   var prctBas = (hZoneTexte - yPRC) / hZoneSensible ;
                   var vit = parseInt(10 + prctBas * 400);
                   var nbLine = (1-prctBas) * 5;


traceExec('prctBas = '+prctBas,2);
                   oEd.scrollTextDown(nbLine,vit);
              }

              else {
// rialto                   window.status = 'cible= '+cible.id+' Zone inerte : pas de d?filement yPRC = '+yPRC ;
                   oEd.scroll   = false;
                   oEd.scrollUp   = false;
                   oEd.scrollDown = false;
              }
  //commented for rialto compatibility dd splitter and scroll text 
  // to verify in other context
  //stopEvent(e);
  },
  
  cibleAscenseur : function (oHtml) {
            var div= oHtml;
            traceExec('cibleAscenseur div.className= '+div.className,9);
            while (div && (div.className != 'piloteScroll')) {
//            while (div && (div.className != 'ascenseur')) {
//            traceExec('bcle cibleAscenseur div.className= '+div.className,9);
              div = div.parentNode;
            }
//            traceExec('sortie bcle cibleAscenseur div.className= '+div.className,9);
            return (div ? (div.className == 'piloteScroll') : false);
//            return (div ? (div.className == 'ascenseur') : false);
  },
  
  onmouseoutAscWin : function(e){
              if (!e) e = window.event;
//              if (!typeof document.addEventListener == "undefined") {
                var oSourceEvt = e.target ? e.target: e.srcElement;
//              if (oSourceEvt.bCursTemoinPosAscWin) 
//               traceExec('onmousemoveAscWin oSourceEvt.oCiu.bCursDsTemoinPosAscWin = '+oSourceEvt.oCiu.bCursDsTemoinPosAscWin ,3);
                if (oSourceEvt.oCiu) oSourceEvt.oCiu.bCursDsTemoinPosAscWin = false;
//                 }
               stopEvent(e);
  },
  onmousemoveAscWin : function(e){
 // lignes suivantes ? occulter pour avoir le double comportement
 // asc window + gradient sur ascenseur
 // mais en l etat seult possible avec FireFox 
              if (!e) e = window.event;
              var oSourceEvt = e.target ? e.target: e.srcElement;
              traceExec('onmousemoveAscWin oSourceEvt.id = '+oSourceEvt.id ,3);
              oSourceEvt.oCiu.bCursDsTemoinPosAscWin = true;
              traceExec('onmousemoveAscWin oSourceEvt.oCiu.bCursDsTemoinPosAscWin = '+oSourceEvt.oCiu.bCursDsTemoinPosAscWin ,3);
  
///              if (!e) e = window.event;
//                stopEvent(e);
///              var oSourceEvt = e.target ? e.target: e.srcElement;
///              traceExec('onmousemoveAscWin oSourceEvt.id = '+oSourceEvt.id ,3);
//              traceExec('onmousemoveAscWin this.id = '+this.id ,3);
//              traceExec('onmousemoveAscWin oDeplact.objetEnDeplact.id = '+oDeplact.objetEnDeplact.id,3);

/*                if (oEd.scroll){
                  clearTimeout(oEd.scrollTextTimeout);
                oEd.scroll = false;
                }
*/
//            if (oSourceEvt.bCursTemoinPosAscWin) {
//               traceExec('onmousemoveAscWin oSourceEvt.oCiu.bCursDsTemoinPosAscWin = '+oSourceEvt.oCiu.bCursDsTemoinPosAscWin ,3);
///                 oSourceEvt.oCiu.bCursDsTemoinPosAscWin = true;
//                 }
///              traceExec('onmousemoveAscWin oSourceEvt.oCiu.bCursDsTemoinPosAscWin = '+oSourceEvt.oCiu.bCursDsTemoinPosAscWin ,3);
/*              if (    !oDeplact 
                  ||  (oSourceEvt != oDeplact.objetEnDeplact)) {
                stopEvent(e);
                }
*/
   }
}


//ContainerAutoScroll.prototype = new Container;

ContainerAutoScroll.prototype.nbInstances = 0;